Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
Спасибо что отозвались.
UCSR0B &=~ (1 << UDRIE0); это осталось от прошлого. Сейчас переделал код для тестирования, для UART0 привел ниже, остальное аналогично. Работает только передача данных. С начало работает прерывание UDRE, как только передан весь буфер, выключаю прерывание UDRE и включаю TX, по срабатыванию TX всё выключаю. Прерывание контролирую и в эмуляторе AVR Studio + WINAVR и в железе, дёрганием ножек, здесь не указал. В эмуляторе ставлю точку прерывания на строке UDR0 = Buff [CountTx_0]; запускаю дебагер. Для UART0 и UART1 дебагер останавливается, для UART2 и UART3 нет.
char Buff[10];
void StartTX_0(void)
{
UCSR0C |= ((1 << UCSZ00) | (1 << UCSZ01));
UBRR0L = 14; // fosc = 13.824 MHz U2X = 0 BR = 57.6k
UBRR0H = 0;
UDR0 = Buff[0];
CountTx_0 = 1;
UCSR0B |= ((1 << TXEN0) | (1 << UDRIE0));
}
ISR (USART0_TX_vect)
{
UCSR0B &=~ ((1 << TXCIE0) | (1 << TXEN0) | (1 << UDRIE0));
}
ISR (USART0_UDRE_vect)
{
UDR0 = Buff [CountTx_0];
CountTx_0++;
if (CountTx_0 == sizeof(Buff))
{
UCSR0B &=~ (1 << UDRIE0);
UCSR0B |= (1 << TXCIE0);
return;
}
}
Составить ответ | Вернуться на конференцию
Ответы
- Ответ: - Юрий_СВ (23.02.2011, 14:46:25 213.5.199.158, 853 байт)
- «Если считает, что у вас всё безупречно» упаси боже от такой глупости:) Я только не пойму где я не прав. С остальными Вашими рекомендациями разбираюсь. - Oleg_IT (23.02.2011, 16:08:15 188.123.240.44, пустое)
- Ну, а на счёт проверки наличия прерываний - используйте аппаратную ногу порта, который ВООБЩЕ не управляется из прерываний. - Юрий_СВ (23.02.2011, 14:51:2 217.12.195.250, 90 байт)
- Доработал так - Oleg_IT (23.02.2011, 15:42:47 188.123.240.44, 2272 байт)
- А что, если FlagTx_3 изначально = 2 ? И ? - Юрий_СВ (23.02.2011, 16:22:54 213.5.199.158, 888 байт)
- Ответ: - Oleg_IT (23.02.2011, 16:57:52 188.123.240.44, 793 байт)
- Ответ: - Юрий_СВ (23.02.2011, 17:28:13 213.5.199.158, 1250 байт)
- Ответ: - Oleg_IT (23.02.2011, 18:02:58 188.123.240.44, 448 байт)
- Блин, ну нельзя же так....Громоздишь какие-то конструкции, а нам их разбирать... Я два слова-то связать не могу, а тут такое!(+) - Дастун (23.02.2011, 15:49:6 95.72.144.136, 197 байт)
- Несколько замечаний/вопросов(+): - Дастун (23.02.2011, 14:42:33 95.72.144.136, 262 байт)
- Ответ: - Юрий_СВ (23.02.2011, 14:54:30 217.12.195.250, 160 байт)
- Пробовал и наоборот, ни чего не меняется. Это я срисовал с примера работы UART - Oleg_IT (23.02.2011, 15:14:5 188.123.240.44, пустое)
- вот только.... то, что сначала ложит байт в UDR, а ПОТОМ разрешает передатчик - это плохо! Не факт, что запуститься! - Юрий_СВ (23.02.2011, 14:56:22 213.5.199.158, пустое)
- (+) - Дастун (23.02.2011, 15:14:9 95.72.144.136, 264 байт)