mirr 0 11 апреля, 2010 Опубликовано 11 апреля, 2010 (изменено) · Жалоба Привет всем!!! не могу понять странность: написал простенький проектик, в цикле моргает светодиод и отправляются данные по uart через ST232 на комп. если к МК подключен дэбаггер то все нормально работает. стоит отключить, так светодиод моргает, а данных по нет... код работы с uart рабочий, на другой плате все ок, только там МК общается по uart с SIM300... может у кого какие идеи есть, то подскажите, буду очень благодарен!!!!!! 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 Изменено 12 апреля, 2010 пользователем aaarrr Оформление цитаты исходника Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rezident 0 11 апреля, 2010 Опубликовано 11 апреля, 2010 · Жалоба Ни схемы, ни проекта, ни даже кусочка исходника ... опять задачка для телепатов? :twak: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
malysh_nrg 0 12 апреля, 2010 Опубликовано 12 апреля, 2010 · Жалоба выложите проект. Уж очень на мою проблему похоже ТУТ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
mirr 0 14 апреля, 2010 Опубликовано 14 апреля, 2010 · Жалоба проблему решил. дело было в кабеле через который соединялись плата и комп, а именно плохо пропаянная земля, из-за чего уровень сигнала сдвинулся на 5В... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться