EFM32片内外设--USART之SPI Rx interrupt
来源:互联网 发布:软件购买app 编辑:程序博客网 时间:2024/05/16 18:20
在基本polling的基础上,将Rx设置为中断接收。
硬件环境:TG STK,将PD0,PD1短接,及usart1 的Tx,及Rx, 没有使用内部的loopback功能。对应 TG STK 20 pin 扩展口的第4脚与第6脚。
软件环境:在主循环中,不断发送数据,在Rx中断中,判断接收到的数据,如果是特殊的那个字,则将LED的控制脚去反。
代码如下 :
#include <stdint.h>
#include <stdbool.h>
#include "efm32.h"
#include "efm32_chip.h"
#include "efm32_cmu.h"
#include "efm32_gpio.h"
#include "efm32_usart.h"
void USART1_RX_IRQHandler(void)
{
if(USART_Rx(USART1) == 0x5)
{
GPIO_PinOutToggle(gpioPortD, 7);
}
}
void SPI_Initial(void)
{
CMU_ClockEnable(cmuClock_HFPER, true);
CMU_ClockEnable(cmuClock_GPIO, true);
CMU_ClockEnable(cmuClock_USART1, true);
USART_InitSync_TypeDef SPI_init = USART_INITSYNC_DEFAULT;
SPI_init.baudrate = 200000;
USART_InitSync(USART1, &SPI_init);
USART1->IFC = _USART_IFC_MASK;
NVIC_ClearPendingIRQ(USART1_RX_IRQn);
NVIC_EnableIRQ(USART1_RX_IRQn);
USART1->IEN = USART_IEN_RXDATAV;
GPIO_PinModeSet(gpioPortD,0,gpioModePushPull,1); //tx
GPIO_PinModeSet(gpioPortD,1,gpioModeInput,1); //rx
GPIO_PinModeSet(gpioPortD,2,gpioModePushPull,1); //clk
GPIO_PinModeSet(gpioPortD,3,gpioModePushPull,1); //cs
USART1->ROUTE |= USART_ROUTE_CSPEN | USART_ROUTE_CLKPEN | USART_ROUTE_TXPEN | USART_ROUTE_RXPEN | USART_ROUTE_LOCATION_LOC1;
}
/**************************************************************************//**
* @brief Main function
*****************************************************************************/
/**************************************************************************//**
* @brief Main function
*****************************************************************************/
int main(void)
{
/* Chip errata */
CHIP_Init();
SystemCoreClockUpdate();
SPI_Initial();
CMU_ClockEnable(cmuClock_GPIO, true);
GPIO_PinModeSet(gpioPortD, 7, gpioModePushPull,0);
unsigned char ucData = 0;
/* Infinite blink loop */
while(1)
{
unsigned long ulDelay = 100000;
while(ulDelay--);
if(ucData < 10)ucData++;
else ucData = 0;
USART_Tx(USART1,ucData);
}
}
效果如下:
- EFM32片内外设--USART之SPI Rx interrupt
- EFM32片内外设--USART之UART Rx interrupt
- EFM32片内外设--USART之SPI 基本polling
- EFM32片内外设--DMA之LeUart Tx Rx
- EFM32片内外设--USART之UART误码率计算
- EFM32片内外设--USART UART TX+DMA
- EFM32片内外设--DAC之tips
- EFM32片内外设--LCD之动画
- EFM32片内外设 -- Systick
- EFM32片内外设 -- DWT
- EFM32片内外设---USART2
- EFM32片内外设--AES 之CBC加密
- EFM32片内外设--PCNT之External Clock
- EFM32片内外设--MSC之一般操作
- EFM32片内外设--MSC之不关总中断
- EFM32片内外设--EMU之关闭RAM
- EFM32片内外设--ACMP之基本应用
- EFM32片内外设--GPIO之SWD接口复用
- python对XML的解析
- Oracle中NUMBER类型如果不指定长度和小数点精度默认是多长
- 7. 创业5个黄金阶段 你抓住了吗
- 马虎
- 关于ContentProvider的理解与简单应用
- EFM32片内外设--USART之SPI Rx interrupt
- Adobe Acrobat 打开PDF文件显示 “内容准备进度”窗口
- 基本数据类型
- struts2登陆代码
- NSDictionary类使用
- 为什么win2003服务器sql2005服务总是偶尔自动停止?
- C# 窗体间通讯
- Eclipse平台常用插件
- 8.《创业邦》:十大创业困境