Доброго дня!
Дано: stm8l162m8, компилятор IAR
Столкнулся с такой проблемой, пытаюсь принимать данные по UART с помощью прерывания, но на нем выполнение повисает.
При отладке в обработчик прерывания даже не попадаю.
В цикле ( без прерывания) прием и передача работают.
Подскажите, что я не так делаю?
PHP код:
|
#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; //
}
|