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