Привет всем!!!
не могу понять странность: написал простенький проектик, в цикле моргает светодиод и отправляются данные по uart через ST232 на комп. если к МК подключен дэбаггер то все нормально работает. стоит отключить, так светодиод моргает, а данных по нет...
код работы с uart рабочий, на другой плате все ок, только там МК общается по uart с SIM300...
может у кого какие идеи есть, то подскажите, буду очень благодарен!!!!!!
CODE
void BSP_USART_Init( void )
{
CPU_INT32U pclk_freq;
CPU_INT32U baud_rate = 9600;//115200;
pclk_freq = BSP_CPU_ClkFreq(); /* Get the UART input clock frequency */
AT91C_BASE_PIOA->PIO_PDR = BSP_GPIOA_UART0;
AT91C_BASE_PMC->PMC_PCER = (1 << AT91C_ID_US0); /* Enable the US0 peripheral clock */
/* ---------------------- SETUP US0 ----------------------- */
AT91C_BASE_US0->US_MR = AT91C_US_USMODE_NORMAL /* RS232C mode selected */
| AT91C_US_CLKS_CLOCK /* USART input CLK is MCK */
| AT91C_US_CHRL_8_BITS /* 8 bit data to be sent */
| AT91C_US_PAR_NONE /* No parity bit selected */
| AT91C_US_NBSTOP_1_BIT; /* 1 stop bit selected */
//| (0x2 << 14); /* !!!!!!!!!! LOOPBACK !!!!!!!!! */
/* Set the USART baud rate */
AT91C_BASE_US0->US_BRGR = (CPU_INT16U)(pclk_freq / baud_rate / 16)+1;
/* ---------------- INITIALIZE AIC FOR US0 ---------------- */
/*pUS0->US_TPR = (AT91_REG)pUSBufferTX;
pUS0->US_TCR = USBUFSIZE;
pUS0->US_TNPR = (AT91_REG)0;
pUS0->US_TNCR = 0;*/
AT91C_BASE_US0->US_RPR = (AT91_REG)pUSBufferRX;
AT91C_BASE_US0->US_RCR = USBUFSIZE;
AT91C_BASE_US0->US_RNPR = (AT91_REG)0;
AT91C_BASE_US0->US_RNCR = 0;
AT91C_BASE_US0->US_PTCR = AT91C_PDC_RXTEN;
AT91C_BASE_AIC->AIC_IDCR = (1<<AT91C_ID_US0);
AT91C_BASE_AIC->AIC_SVR[AT91C_ID_US0] = (unsigned int)UsartHandler;
AT91C_BASE_AIC->AIC_SMR[AT91C_ID_US0] = (AT91C_AIC_SRCTYPE_INT_POSITIVE_EDGE|0x4);
AT91C_BASE_AIC->AIC_IECR = (1<<AT91C_ID_US0);
AT91C_BASE_US0->US_RTOR = 0x00FF;
AT91C_BASE_US0->US_IER = AT91C_US_TIMEOUT;// | AT91C_US_RXRDY;// | AT91C_US_ENDRX;
AT91C_BASE_US0->US_IDR = ~(AT91C_US_TIMEOUT);// | AT91C_US_RXRDY);// | AT91C_US_ENDRX);
AT91C_BASE_US0->US_CR = AT91C_US_RXEN | AT91C_US_TXEN;
}
void BSP_Ser_WrByte (CPU_INT08U tx_byte)
{
while ((AT91C_BASE_US0->US_CSR & AT91C_US_TXRDY) == 0){ /* Wait for room in the transmit register. */
;
}
AT91C_BASE_US0->US_THR = tx_byte;
}
void BSP_Ser_WrStr (CPU_CHAR *tx_str)
{
while ((*tx_str) != 0) {
BSP_Ser_WrByte(*tx_str++);
}
}
static void AppTaskRf (void *p_arg)
{
. . .
LED_On();
while (DEF_TRUE)
{
while(ind)
{
str[4 - ind] = ReadData();
ind--;
}
Reset_Fifo();
ind = 4;
BSP_Ser_WrStr(str);
if (Crc8(str, 3) == str[3])
{
LED_Toggle();
}
memset(str,0,5);
}
}
shema.sch ( 160 килобайт )
Кол-во скачиваний: 82
Сообщение отредактировал aaarrr - Apr 12 2010, 06:52
Причина редактирования: Оформление цитаты исходника