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

 
 
> Проблема с прерываниями 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
 
Start new topic
Ответов
Gremz
сообщение Sep 14 2011, 10:40
Сообщение #2





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



Цитата(Stanislav_S @ Sep 12 2011, 12:01) *
В обработчике прерываний надо сбросить соответствующий флаг - прерывания.

а разве при чтении из регистра данных флаг не должен сбрасываться автоматически?
Go to the top of the page
 
+Quote Post
Stanislav_S
сообщение Sep 15 2011, 12:18
Сообщение #3


извечный пессимист
*****

Группа: Свой
Сообщений: 1 113
Регистрация: 9-10-06
Из: Днепропетровск
Пользователь №: 21 125



Цитата(Gremz @ Sep 14 2011, 14:40) *
а разве при чтении из регистра данных флаг не должен сбрасываться автоматически?

лучше бы даташит почитали бы. там все написано, это все таки хоть и 8 битник, но не AVR sm.gif


--------------------
Slaves are those of this world
Given freedom to lay chains upon The Master
The wolf is no longer free
Release the chains and come for me
Go to the top of the page
 
+Quote Post
Gremz
сообщение Sep 16 2011, 05:02
Сообщение #4





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



Цитата(Stanislav_S @ Sep 15 2011, 16:18) *
лучше бы даташит почитали бы. там все написано, это все таки хоть и 8 битник, но не AVR sm.gif


Читал, но возможно какой-то момент упустил. laughing.gif
в даташите написано :

RXNE: Read data register not empty.
This bit is set by hardware when the content of the RDR shift register has been transferred to the
USART_DR register. An interrupt is generated if RIEN=1 in the USART_CR2 register. It is cleared by a
read to the USART_DR register.



Если не сложно, может дадите заведомо рабочий кусок кода с инициализацией USART и прерыванием по приему? Буду премного благодарен
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 20th July 2025 - 08:54
Рейтинг@Mail.ru


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