реклама на сайте
подробности

 
 
> Проблема с прерываниями UART stm8l162m8 в IAR
Gremz
сообщение Sep 12 2011, 05:18
Сообщение #1





Группа: Участник
Сообщений: 10
Регистрация: 12-09-11
Пользователь №: 67 128



Доброго дня!
Дано: stm8l162m8, компилятор IAR
Столкнулся с такой проблемой, пытаюсь принимать данные по UART с помощью прерывания, но на нем выполнение повисает.
При отладке в обработчик прерывания даже не попадаю.
при приеме в цикле, данные считываются и отправляются...
Подскажите, что я не так делаю?

CODE
#include "iostm8l162m8.h"
#include "intrinsics.h"


main()
{
long i;
unsigned char a=0x30;

CLK_PeripheralClockConfig(CLK_Peripheral_USART1, ENABLE); // включить тактирование UART
__enable_interrupt();

HSE_init (); // инициализация высокоскоростноно кварца и настрой его как основного источника тактирования

USART1_BRR2 = 0x05;
USART1_BRR1 = 0xD0;

USART1_CR2_REN=1; // включить приемник
USART1_CR2_TEN=1; // включить передатчик

USART1_CR2_RIEN=1; // Разрешить прерывание по RXE.

SetBit(PD_DDR,7); // светодиод 1
SetBit(PD_CR1,7);
ClrBit(PD_CR2,7);

SetBit(PD_DDR,6); //светодиод 2
SetBit(PD_CR1,6);
ClrBit(PD_CR2,6);

PD_ODR_bit.ODR7=1;

while(1)
{
asm("bcpl 0x500F,#7") ;
asm("bcpl 0x500F,#6") ;
for(i=0;i<40000;i++)
{
asm("nop"); //для исключения влияния оптимизатора
}
//while (!(USART1_SR_TXE)) {}
//USART1_DR=a ;
if (++a>128)
{
a=0x30;
}
}
}


#pragma vector=USART1_R_OR_vector
__interrupt void UART2_RXE(void)
{
char a;
a=USART1_DR;
USART1_DR=++a; //
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 05:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01365 секунд с 7
ELECTRONIX ©2004-2016