AT91SAM7S64 DBGU port

Mészáros Attila ictboy at np.hu
Fri Nov 18 11:54:00 CET 2005


Sajna nem ez a gond...

AccessPort terminallal nézem, de nem ez a baja...

Köszi...
Attila


Miko Imre <imre.miko at siemens.com> irta:

> Mivel nezed?
> A Windows terminal progija lenyeli a nullakat.
> Probald valami massal. (ComWizard, SerialWatcher, stb.)
> 
> Udv
> Imre 
> 
> -----Original Message-----
> From: elektro-bounces at tesla.hu [mailto:elektro-bounces at tesla.hu] On
> Behalf Of Mészáros Attila
> Sent: 2005.november 18. 11:29
> To: elektro at tesla.hu
> Subject: AT91SAM7S64 DBGU port
> 
> 
> Üdv!
> 
> A problémám a következő. Most épp az ARM debug soros portját akarom 
> használni adatkommunikációra, csak az a baj, hogy ha küldök egy
> byte-ot 
> a PC felé, akkor csak akkor jut el az adat a PCig, ha a byte nem 0.
> 
> Ha hex 0x00-t küldök ki a debug porton, akkor a byte nem megy ki. Van 
> valakinek valami ötlete, hogy miért ?
> 
> Köszi:
> Attila
> 
> Itt a kód:
> 
> 
> // Include Standard files
> #include "Board.h"
> #include "include\Regptr.h"		//Pointers for the registers 
> base address
> 
> /* Global variables */
> #define SPEED 		(MCKKHz/10)
> 
> unsigned int LedSpeed = SPEED *12 ;
> const int led_mask[4]= {LED1, LED2, LED3, LED4};
> unsigned char I2CBuffer[100];
> 
> //--------------------------------------------------------------------
--
> ----------------
> unsigned int BaudrateCalc (
> 	const unsigned int main_clock, // \arg peripheral clock
> 	const unsigned int baud_rate)  // \arg UART baudrate
> {
> 	unsigned int baud_value = (10 * main_clock/(baud_rate * 16));
> 	if ((baud_value % 10) >= 5)
> 		baud_value = (baud_value / 10) + 1;
> 	else
> 		baud_value /= 10;
> 	return baud_value;
> }
> //--------------------------------------------------------------------
--
> ----------------
> /*
> static void change_speed (void)
> {
> 	if (((pPIO->PIO_PDSR) & SW1_MASK) == 0 )
> 	{
> 		if ( LedSpeed > SPEED ) LedSpeed -=SPEED ;
> 	}
> 	if (((pPIO->PIO_PDSR) & SW3_MASK) == 0 )
> 	{
> 	    if ( LedSpeed < MCK ) LedSpeed +=SPEED ;
> 	}
> }
> //--------------------------------------------------------------------
--
> ----------------
> static void wait ( void )
> {
>     unsigned int waiting_time ;
>     change_speed () ;
>     for(waiting_time = 0; waiting_time < LedSpeed; waiting_time++) ;
> }
> */
> //--------------------------------------------------------------------
--
> ----------------
> static void SendRS232_Byte(unsigned char TxByte)
> {
> 
> // ez a rész küldi ki a byteot a debug porton, de 0x00-t nem ???
> 
>       pDBGU->DBGU_CR = AT91C_US_RSTSTA;
>       pDBGU->DBGU_THR = TxByte & 0x000000ff;
>       while (((pDBGU->DBGU_CSR) & AT91C_US_TXRDY) == 0) {};
> }
> //--------------------------------------------------------------------
--
> ----------------
> unsigned int RecRS232_Byte(void)
> {
>   unsigned int RxByte, Cou;
>       RxByte=0x100; Cou=0;
>       while(Cou<10000)
>       {
>         if (pDBGU->DBGU_CSR & AT91C_US_RXRDY)
>         {
>            RxByte = pDBGU->DBGU_RHR & 0x00000fff;
>            Cou=10000;
>         }
>       Cou++;
>       }
>       return RxByte;
> }
> //--------------------------------------------------------------------
--
> ----------------
> static void SendRS232String(unsigned char *Kiirni)
> {
> unsigned char y,l;
> 
>     l=strlen(Kiirni);
>     for(y=0;y<l;y++){SendRS232_Byte(Kiirni[y]);}
>     SendRS232_Byte(13);SendRS232_Byte(10);
> }
> //--------------------------------------------------------------------
--
> ----------------
> static void ClearRS232Screen(unsigned char Sor)
> {
> unsigned char y;
> 
>     for(y=0;y<Sor;y++){SendRS232_Byte(13);SendRS232_Byte(10);}
> }
> //--------------------------------------------------------------------
--
> ----------------
> static void CheckRS232(void)
> {
> unsigned int xx;
> unsigned char a;
> 
>         xx=RecRS232_Byte();
>         switch(xx)
>         {
>           case 0x31:
>             SendRS232String(" Start I2C tracing...");
>             break;
>         
>           case 0x32:
>             SendRS232String(" I2C tracing stopped...");
>             break;
>             
>           case 0x33:
>             for(a=0;a<sizeof(I2CBuffer);a++)
>             {
>                 SendRS232_Byte(I2CBuffer[a]);
>             }
>             break;
>         }
> }
> //--------------------------------------------------------------------
--
> ----------------
> static void Initialize(void)
> {
>     // Setup Clocks
>       pPMC->PMC_PCER = 1 << AT91C_ID_PIOA;
>       pPMC->PMC_PCER = 1 << AT91C_ID_SYS;
>      
>     // Setup LEDs
>       pPIO->PIO_PER = LED_MASK;
>       pPIO->PIO_OER = LED_MASK;
>       pPIO->PIO_SODR = LED1 | LED2 | LED3 | LED4;
>       
>     // Setup DBGU RS232 Port
>       pPIO->PIO_PDR = AT91C_PA10_DTXD | AT91C_PA9_DRXD;
>       pPIO->PIO_ASR = AT91C_PA10_DTXD | AT91C_PA9_DRXD;
>       
>       pDBGU->DBGU_BRGR  = BaudrateCalc(MCK, 115200);
>       pDBGU->DBGU_MR    = AT91C_US_PAR_NONE | AT91C_US_CHMODE_NORMAL;
>       pDBGU->DBGU_CR    = AT91C_US_RXEN | AT91C_US_TXEN;
> }
> //--------------------------------------------------------------------
--
> ----------------
> int main(void)
> {
> unsigned char Cntr;
> unsigned char x1;
> 
>       Initialize();
>   
>       x1=0;
> /*
>       ClearRS232Screen(50);
>       SendRS232String(" ");
>       SendRS232String("   1 - Start I2C tracing");
>       SendRS232String("   2 - Stop I2C tracing");
>       SendRS232String("   3 - Download I2C buffer to PC");
>       SendRS232String(" ");
>   */
>    for(Cntr=0;Cntr<255;Cntr++)
>    {
>       SendRS232_Byte(Cntr);
>    }
>     SendRS232_Byte(0);
>     SendRS232_Byte(0);
>      SendRS232_Byte(0);
>                     
>    while(1)
>    {  
>         if((x1 & 1))  pPIO->PIO_CODR = LED1;
>         if(!(x1 & 1)) pPIO->PIO_SODR = LED1;
>         x1=!x1;
>         
>         CheckRS232();
> 
>    }       
> }
> 
> -----------------------------------
>  Szponzorunk: http://tonerbolt.hu/
> 
> -----------------------------------
>  Szponzorunk: http://tonerbolt.hu/
> 
> 
> 







More information about the Elektro mailing list