C EFM32巨型壁虎,中断程序不工作
我正在使用EFM32巨壁虎3700入门套件进行基本的UART回音。 当我在主功能的while(1)环路中将RX回波到TX时,它工作。但是,当我想使用中断功能时,它不再工作。检查寄存器表明我的数据被正确读取,但它不会将数据发回 我的代码:C EFM32巨型壁虎,中断程序不工作,c,interrupt,uart,gecko,C,Interrupt,Uart,Gecko,我正在使用EFM32巨壁虎3700入门套件进行基本的UART回音。 当我在主功能的while(1)环路中将RX回波到TX时,它工作。但是,当我想使用中断功能时,它不再工作。检查寄存器表明我的数据被正确读取,但它不会将数据发回 我的代码: #include "efm32gg990f1024.h" #include "em_chip.h" // required for CHIP_Init() function #include <string.h> #define COM_PO
#include "efm32gg990f1024.h"
#include "em_chip.h" // required for CHIP_Init() function
#include <string.h>
#define COM_PORT 3 // gpioPortD (USART location #1: PD0 and PD1)
#define UART_TX_pin 0
char rx_char = 0; // Temp variable for storing received characters
int main() {
CHIP_Init(); // This function addresses some chip errata and should be called at the start of every EFM32 application (need em_system.c)
uint8_t i;
char test_string[] = "\n\rHello World!\n\r";
CMU->CTRL |= (1 << 14); // Set HF clock divider to /2 to keep core frequency <32MHz
CMU->OSCENCMD |= 0x4; // Enable XTAL Oscillator
while(! (CMU->STATUS & 0x8) ); // Wait for XTAL osc to stabilize
CMU->CMD = 0x2; // Select HF XTAL osc as system clock source. 48MHz XTAL, but we divided the system clock by 2, therefore our HF clock should be 24MHz
CMU->HFPERCLKEN0 = (1 << 13) | (1 << 1); // Enable GPIO, and USART1 peripheral clocks
GPIO->P[COM_PORT].MODEL = (1 << 4) | (4 << 0); // Configure PD0 as digital output and PD1 as input
GPIO->P[COM_PORT].DOUTSET = (1 << UART_TX_pin); // Initialize PD0 high since UART TX idles high (otherwise glitches can occur)
// Use default value for USART1->CTRL: asynch mode, x16 OVS, lsb first, CLK idle low
// Default frame options: 8-none-1-none
USART1->CLKDIV = (48 << 6); // 48 will give 115200 baud rate (using 16-bit oversampling with 24MHz peripheral clock)
USART1->CMD = (1 << 11) | (1 << 10) | (1 << 2) | (1 << 0); // Clear RX/TX buffers and shif regs, Enable Transmitter and Receiver
USART1->IFC = 0x1FF9; // clear all USART interrupt flags
USART1->ROUTE = 0x103; // Enable TX and RX pins, use location #1 (UART TX and RX located at PD0 and PD1, see EFM32GG990 datasheet for details)
// Print test string
for(i=0; i<strlen(test_string); i++) {
while( !(USART1->STATUS & (1 << 6)) ); // wait for TX buffer to empty
USART1->TXDATA = test_string[i]; // print each character of the test string
}
while(1) {
// what used to be in main loop
/*
if(USART1->STATUS & (1 << 7)) { // if RX buffer contains valid data
rx_char = USART1->RXDATA; // store the data
}
if(rx_char) { // if we have a valid character
if(USART1->STATUS & (1 << 6)) { // check if TX buffer is empty
USART1->TXDATA = rx_char; // echo received char
rx_char = 0; // reset temp variable
}
}
*/
}
}
void USART1_RX_IRQHandler(void)
{
if(USART1->STATUS & (1 << 7)) { // if RX buffer contains valid data
rx_char = USART1->RXDATA; // store the data
}
if(rx_char) { // if we have a valid character
if(USART1->STATUS & (1 << 6)) { // check if TX buffer is empty
USART1->TXDATA = rx_char; // echo received char
rx_char = 0; // reset temp variable
}
}
}
#包括“efm32gg990f1024.h”
#包括chip_Init()函数所需的“em_chip.h”//
#包括
#定义COM#U端口3//gpioPortD(USART位置#1:PD0和PD1)
#定义UART\U TX\U引脚0
字符rx_char=0;//用于存储接收字符的临时变量
int main(){
CHIP_Init();//此函数处理一些芯片勘误表,应该在每个EFM32应用程序(需要em_system.c)开始时调用
uint8_t i;
字符测试\u字符串[]=“\n\rHello World!\n\r”;
CMU->CTRL |=(1状态&0x8));//等待XTAL osc稳定
CMU->CMD=0x2;//选择HF XTAL osc作为系统时钟源。48MHz XTAL,但我们将系统时钟除以2,因此我们的HF时钟应为24MHz
CMU->HFPERCLKEN0=(1状态和1 RXDATA;//存储数据
}
if(rx_char){//如果我们有一个有效字符
if(USART1->STATUS&(1 TXDATA=rx_char;//echo received char
rx_char=0;//重置温度变量
}
}
}
您忘记在NVIC和USART中启用中断向量
USART1->IEN = USART_IEN_RXDATAV;
NVIC_EnableIRQ(USART1_RX_IRQn);
您忘记在NVIC和USART中启用中断向量
USART1->IEN = USART_IEN_RXDATAV;
NVIC_EnableIRQ(USART1_RX_IRQn);
您忘记在NVIC和USART中启用中断向量
USART1->IEN = USART_IEN_RXDATAV;
NVIC_EnableIRQ(USART1_RX_IRQn);
您忘记在NVIC和USART中启用中断向量
USART1->IEN = USART_IEN_RXDATAV;
NVIC_EnableIRQ(USART1_RX_IRQn);
我看不到在哪里设置中断控制器或加载地址为“USART1_RX_IRQHandler”的IRQ向量?在Cortex M3上也没有。我看不到在哪里设置中断控制器或加载地址为“USART1_RX_IRQHandler”的IRQ向量?在Cortex M3上也没有。我看不到在哪里设置中断控制器使用“USART1_RX_IRQHandler”地址加载或加载IRQ向量?您在Cortex M3上都没有。我看不出您在哪里设置中断控制器或使用“USART1_RX_IRQHandler”地址加载IRQ向量?您在Cortex M3上都没有。