  | 
		 
			
			
			
			
			
	
		
			
  
 | 
	 		
	  			
	  				| 
						  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 2025 11 04, 03:10. 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 | 
	 
	
	  | 
	    
	    	Dantų protezavimas 
	    	All on 4 implantai, 
		Endodontija mikroskopu, 
		Dantų implantacija | 
	 
	
	  | 
	    
	    	FS25 Mods 
	    	FS25 Maps,
		FS25 Cheats,
		FS25 Install Mods | 
	 
	
	  | 
	    
	    	FS25 Mods 
	    	Farming Simulator 25 Mods, 
	    	FS25 Maps | 
	 
	
	  | 
	    
	    	ATS Trailers 
	    	American Truck Simulator Mods,
		ATS Trucks,
		ATS Maps | 
	 
 
 
		 | 
	 
 
			
			 
 
 
  | 
		  |