sinsay (11.01.2012 20:01, просмотров: 2565)
Пытаюсь поймать сигнал break на stm32 ловлю его на флажок FE: Framing error, на atmege получалось и на LPC тоже. Пример кода для stm32 не пойму почему не попадаю под этот IF --> if(USART_GetITStatus(USART1, USART_IT_FE ) > 0)
void USART1_IRQHandler(void)
{//0
if(USART_GetITStatus(USART1, USART_IT_RXNE) > 0)
{//1
USART_ClearITPendingBit(USART1, USART_IT_RXNE); // Clear bit USART_IT_RXNE in status register
intoccursuart=1;
if(USART_GetITStatus(USART1, USART_IT_FE ) > 0) // framing error !!!!!Под IF никогда не попадаю
{//2
fe_flag=1; k=0;
badbyte = USART_ReceiveData(USART1);
}//2
else
{//2
usart_array[k] = USART_ReceiveData(USART1);
k++;
}//2
Для атмеге все работает нормально код
if (checkbit(UCSRA,RXC)>0) // проверка прихода байта
{//1
intoccursuart=1;
if (checkbit(UCSRA,FE)>0) {//2 проверка сигнала break
fe_flag=1;
badbyte=UDR;
}//2
else {//2
curbyte=UDR;
}//2
}//1
для LPC тоже работает тут я флаг BI проверяю Break interrupt , с флагом FE тоже пробовал --> работает
__ramfunc void UART0Interrupt(void)
{
unsigned char temp;
temp=0;
if (checkbit(U0IIR,1)>0) setbit(temp,0);
else clearbit(temp,0);
if (checkbit(U0IIR,2)>0) setbit(temp,1);
else clearbit(temp,1);
if (checkbit(U0IIR,3)>0) setbit(temp,2);
else clearbit(temp,2);
switch (temp)
{//switch
case 2: //010 Receive data Available
{//case 2
intoccursuart=1;
if(U0LSR_bit.BI > 0) //Yes--> Break interrupt
// if(U0LSR_bit.FE > 0)
{//2
fe_flag=1;
badbyte=U0RBR;
}//2
else {//2
// curbyte=UDR;
curbyte=U0RBR;
}//2
break;
}//case 2
//----------
case 3: //011 Receive Line status
{//1
break;
}//1
//-----------
}//switch
VICVectAddr = 0;
}
не пойму что не так?