We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
hi all, I want to make a interrupt driven uart for str9 inwhich when it recieves a character it should jump to recieve interrupt handler where i will process somethinh to the character and then it should return to main programme mythis code does not come out from handler please help
#include "91x_lib.h" #include "stdio.h" #include <91x_lib.h> #include <string.h> #include <limits.h> //#include "sio.h" UART_InitTypeDef UART_InitStructure; static void Delay(u32 nCount) { u32 j = 0; for(j = nCount; j != 0; j--); } void main(void) { GPIO_InitTypeDef GPIO_InitStructure; UART_InitTypeDef UART_InitStructure; SCU_APBPeriphClockConfig(__UART0, ENABLE); SCU_APBPeriphClockConfig(__GPIO5, ENABLE); GPIO_DeInit(GPIO5); GPIO_InitStructure.GPIO_Direction = GPIO_PinInput; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1; GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable; GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1 ; GPIO_Init (GPIO5, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull ; GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt3 ; GPIO_Init (GPIO5, &GPIO_InitStructure); UART_DeInit(UART0); UART_InitStructure.UART_WordLength = UART_WordLength_8D; UART_InitStructure.UART_StopBits = UART_StopBits_1; UART_InitStructure.UART_Parity = UART_Parity_No ; UART_InitStructure.UART_BaudRate = 115200; UART_InitStructure.UART_HardwareFlowControl = UART_HardwareFlowControl_None; UART_InitStructure.UART_Mode = UART_Mode_Tx_Rx; UART_InitStructure.UART_FIFO = UART_FIFO_Disable; UART_Init(UART0, &UART_InitStructure); UART_Cmd(UART0, ENABLE); UART_ITConfig(UART0, UART_IT_Receive, ENABLE); SCU_AHBPeriphClockConfig(__VIC,ENABLE); SCU_AHBPeriphReset(__VIC,DISABLE); VIC_DeInit(); VIC_Config(UART0_ITLine, VIC_IRQ, 0); VIC_ITCmd(UART0_ITLine, ENABLE); UART_Cmd(UART0, ENABLE); while(1) { } } int SendChar (int ch) { UART_SendData(UART0, ch); UART_ITConfig(UART0, UART_IT_Transmit,DISABLE); while(UART_GetFlagStatus(UART0, UART_IT_Transmit) !=RESET); return (ch); } int GetKey (void) { while ((UART0->FR & 0x10)); /* RX Fifo Empty */ return (UART0->DR); } /* void UART0_IRQHandler(void) { unsigned char ch; if(UART_GetFlagStatus(UART0, UART_FLAG_RxFIFOEmpty) != SET) { ch = UART0->DR; printf("%c",ch); VIC1->VAR=0x00; } // printf("4"); //printf("5"); } */ void UART0_IRQHandler(void) { unsigned char ch; while (UART_GetFlagStatus(UART0, UART_FLAG_RxFIFOEmpty) != SET) { { UART0->ICR = UART_IT_Receive; /* clear the interrupt*/ ch = UART0->DR; printf("%c",ch); VIC1->VAR = 0; } VIC1->VAR = 0; } VIC1->VAR = 0; /* Acknowledge Interrupt*/ }