|
|
Elektronika.lt portalo forumas
Jūs esate neprisijungęs lankytojas. Norint dalyvauti diskusijose, būtina užsiregistruoti ir prisijungti prie forumo.
Prisijungę galėsite kurti naujas temas, atsakyti į kitų užduotus klausimus, balsuoti forumo apklausose.
Administracija pasilieka teisę pašalinti pasisakymus bei dalyvius,
kurie nesilaiko forumo taisyklių.
Pastebėjus nusižengimus, prašome pranešti.
Dabar yra 2024 11 24, 08:56. Visos datos yra GMT + 2 valandos.
|
|
|
|
Forumas » Mikrovaldikliai » ATSAML21 USART
|
Jūs negalite rašyti naujų pranešimų į šį forumą Jūs negalite atsakinėti į pranešimus šiame forume Jūs negalite redaguoti savo pranešimų šiame forume Jūs negalite ištrinti savo pranešimų šiame forume Jūs negalite dalyvauti apklausose šiame forume
|
|
|
|
|
|
ATSAML21 USART |
Parašytas: 2017 12 28, 20:27 |
|
|
|
Sveiki,
Kažkur kažko elementaraus nesuprantu/nežinau.
Meta šiukšles SERCOM USART. Neaiškumas tame kad oscilografo ekrane akivizdžiai matosi kaip kinta start bito ilgis, pasidaro 2x ilgesnis/trumpesnis.
Kelis kartus veikė gerai, kažką pakeitus bet kurioje kodo vietoje ir perkompiliavus tai veikia tai ne - kažkoks randomas.
Porto init:
Kodas: |
struct usart_module usart_dbg_if;
void usart_dbg_init(void) { // SERCOM5 debug
struct usart_config dbg_cfg;
usart_get_config_defaults(&dbg_cfg);
dbg_cfg.baudrate = 115200;
dbg_cfg.mux_setting = USART_RX_1_TX_0_XCK_1;
dbg_cfg.pinmux_pad0 = PINMUX_PB02D_SERCOM5_PAD0;
dbg_cfg.pinmux_pad1 = PINMUX_PB03D_SERCOM5_PAD1;
dbg_cfg.pinmux_pad2 = PINMUX_UNUSED; // nenaudojam
dbg_cfg.pinmux_pad3 = PINMUX_UNUSED; // nenaudojam
//dbg_cfg.generator_source = GCLK_GENERATOR_0;
while (usart_init(&usart_dbg_if, SER_DBG, &dbg_cfg) != STATUS_OK) {
// tusciame WHILE cikle nes uartui reikia laiko
}
usart_enable(&usart_dbg_if);
usart_register_callback(&usart_dbg_if,usart_dbg_rx_interrupt, USART_CALLBACK_BUFFER_RECEIVED);
usart_enable_callback(&usart_dbg_if, USART_CALLBACK_BUFFER_RECEIVED);
usart_register_callback(&usart_dbg_if,usart_dbg_tx_interrupt, USART_CALLBACK_BUFFER_TRANSMITTED);
usart_enable_callback(&usart_dbg_if, USART_CALLBACK_BUFFER_TRANSMITTED);
}
|
Toliau main'e, tiesiog tikrinam, jei laisvas, push next byte.
Kodas: |
void usart_dbg_handle(void) {
if (SER_DBG->USART.INTFLAG.reg & SERCOM_USART_INTFLAG_DRE) {
if (dbg_buf.wp != dbg_buf.rp) { // jai turim ka siust
SER_DBG->USART.DATA.reg = dbg_buf.data[dbg_buf.rp++];
}
}
}
|
Gal reikia TX pina initinti kaip out? ar dar kažkas panašaus? Panašu kad trūksta ARM Basic žinių, nebeišgooglinu... pagalbos!
Akivaizdu kad skiriasi start bito ilgis.....
|
|
|
|
|
|
|
ATSAML21 USART |
Parašytas: 2017 12 29, 07:06 |
|
|
|
Tx piną, visada reikia kaip out padaryti...
Pabandyk vien 0xFF siusti.
Start bito ilgis tik nuo perdavimo greičio priklauso, gal duomenų pirmam baite jau turi, ką nors... |
|
|
|
|
|
|
ATSAML21 USART |
Parašytas: 2017 12 31, 17:44 |
|
|
|
Kada jį daryti kaip out, prieš ar po usart_init/usart_enable, nepadeda nei taip nei kitaip?
Kažkaip logiškai galvojant - jei to reikėtu, ASf turėtu tai atlikti (nebent bug'as)
Gaunasi kažkokia abra-kadabra, keitaliojasi ne tik start bito ilgis, baito persiuntimo trukmė bet ir bitų trukmė baituose.
Siunčiu DBG("%c%c%c%c", 0xFF, 0xFF, 0xAA, 0xAA);
prikabintos kelios oscilogramos, kažkokios pievos vyksta....
Mano patirtis su ARM ribota ir neišgooglinu problemos tad prašymas pagalbos.
Kodas: |
void init_main(void) { // sita kvieciama viena karta main() pradzioje
system_init();
system_clock_init(); // iskart nuluzta
board_init();
irq_initialize_vectors();
cpu_irq_enable();
system_interrupt_enable_global();
usart_dbg_init();
tc_tick_100hz_init(); // paleidziam visam laikui
battery_init(); // baterija kritinis - startuojam iskarto
// visi kiti periferiniai INIT kvieciam is state handlerio pagal situacija
}
void init_mode_normal(void) {
sleepmgr_init();
ioport_init();
ioport_set_pin_dir(LEDred, IOPORT_DIR_OUTPUT);
ioport_set_pin_dir(LEDgreen, IOPORT_DIR_OUTPUT);
usart_car_init();
usart_bb_init();
heater_init();
pump_init();
//ads1220_init();
LED_Gon;
}
void usart_dbg_init(void) { // SERCOM5 debug
struct usart_config dbg_cfg;
ioport_set_pin_dir(PIN_PB02, IOPORT_DIR_OUTPUT);
ioport_set_pin_level(PIN_PB02, 1);
usart_get_config_defaults(&dbg_cfg);
dbg_cfg.baudrate = 115200;
dbg_cfg.mux_setting = USART_RX_1_TX_0_XCK_1;
dbg_cfg.pinmux_pad0 = PINMUX_PB02D_SERCOM5_PAD0;
dbg_cfg.pinmux_pad1 = PINMUX_PB03D_SERCOM5_PAD1;
dbg_cfg.pinmux_pad2 = PINMUX_UNUSED; // nenaudojam
dbg_cfg.pinmux_pad3 = PINMUX_UNUSED; // nenaudojam
dbg_cfg.generator_source = GCLK_GENERATOR_0;
while (usart_init(&usart_dbg_if, SER_DBG, &dbg_cfg) != STATUS_OK) { // tusciame WHILE cikle nes uartui reikia laiko
}
usart_enable(&usart_dbg_if);
//ioport_set_pin_mode(PIN_PB02, IOPORT_MODE_PULLUP);
//
//
//usart_register_callback(&usart_dbg_if,usart_dbg_rx_interrupt, USART_CALLBACK_BUFFER_RECEIVED);
//usart_enable_callback(&usart_dbg_if, USART_CALLBACK_BUFFER_RECEIVED);
//usart_register_callback(&usart_dbg_if,usart_dbg_tx_interrupt, USART_CALLBACK_BUFFER_TRANSMITTED);
//usart_enable_callback(&usart_dbg_if, USART_CALLBACK_BUFFER_TRANSMITTED);
}
int main (void) {
init_main();
init_mode_normal();
while(true){
if (SER_DBG->USART.INTFLAG.reg & SERCOM_USART_INTFLAG_DRE) {
if (dbg_buf.wp != dbg_buf.rp) { // jai turim ka siust
SER_DBG->USART.DATA.reg = dbg_buf.data[dbg_buf.rp++];
}
}
}
}
|
DBG() macrosas sukiša baitus i buferi kaip sprintf tad čia nededu, bus mažiau spamo, duomenys siunčiami teisingi bet hardware'as dirba kažkaip neteisingai, kodėl? Akivaizdu kad net bitu ilgis kaitaiojasi....
|
|
|
|
|
|
|
ATSAML21 USART |
Parašytas: 2017 12 31, 18:50 |
|
|
|
Šito proco nečiupinėjau, bet atrodo, kad dažnio kilpa nepasigauna... |
|
|
|
|
|
ATSAML21 USART |
Parašytas: 2017 12 31, 20:26 |
|
|
|
Kadangi PLL nenaudojamas energijos taupymo sumetimais nemaniau kad taip gali būti....
Dirbo nuo tiesioginio išorinio kvarco _XOSC 24Mhz, perlitavau 12Mhz, viskas suveikė.. nudurnėti galima...
Ačiū už teisingas mintis, ko gero našumo pakaks tad dar energjos sutaupysim
! Visiems linksmai sutikti ! |
|
|
|
|
|
|
Google paieška forume |
|
|
Naujos temos forume |
|
|
FS25 Tractors
Farming Simulator 25 Mods,
FS25 Maps,
FS25 Trucks |
|
ETS2 Mods
ETS2 Trucks,
ETS2 Bus,
Euro Truck Simulator 2 Mods
|
|
FS22 Tractors
Farming Simulator 22 Mods,
FS22 Maps,
FS25 Mods |
|
VAT calculator
VAT number check,
What is VAT,
How much is VAT |
|
LEGO
Mänguköök,
mudelautod,
nukuvanker |
|
Thermal monocular
Thermal vision camera,
Night vision ar scope,
Night vision spotting scope |
|
FS25 Mods
FS25 Harvesters,
FS25 Tractors Mods,
FS25 Maps Mods |
|
Dantų protezavimas
All on 4 implantai,
Endodontija mikroskopu,
Dantų implantacija |
|
FS25 Mods
FS25 Maps,
FS25 Cheats,
FS25 Install Mods |
|
GTA 6 Weapons
GTA 6 Characters,
GTA 6 Map,
GTA 6 Vehicles |
|
FS25 Mods
Farming Simulator 25 Mods,
FS25 Maps |
|
|
|