基于Flagchip FC7300 对UART中断配置的介绍

简介

本文内容对 UART 特性进行了介绍,基于 FC7300 Uart_Interrupt Demo 程序,用上位机发送数据 0X55,通过 UART 接收中断进入 UART 中断处理函数,在中断处理函数中判断接收 Rxbuffer 里的数据是否为 0X55,如果为 0X55,则能实现 LED 灯电平的翻转,此现象为:初始 LED 灯长亮,当 Rxbuffer 接收数据为 0X55 时,LED 灯灭。

硬件平台:旗芯微 FC7300 DEMO BOARD V1 开发板

软件平台:FC7300_SDK_V_0_2_0 

一、 UART特性

▲ 图 1 来自 FC7300 Data Sheet V0.1.1

FC7300 有 18 个 UART,支持全双工、异步、NRZ 串行通信,包括波特率生成器、发送器和接收器块。发送器和接收器使用相同的波特率生成器,发送和接收具有独立 FIFO 结构,发送和接收数据 FIFO 深度均为 16 字,接收和发送请求是单独的可配置选项, FCUART 发送器可配置编程数据长度从 7 位到 10 位,发送和接收数据均可触发中断。

二、程序分析

2.1 Demo 函数概述

  • main函数:程序对时钟、LED 引脚、UART TX /RX 引脚、UART 进行了初始化。
  int main(void)

{



Bsp_CLOCK_Init(); //时钟初始化

BSP_PORT_Init(); //LED UART TX/RX 引脚初始化

BSP_FCUART_Init(); //UART 初始化



while (1)

{s

}

}​
  • BSP_FCUART_Init 函数: 程序初始化 UART 参数配置,UART 波特率为115200,使能了UART 接收数据中断,使能了UART。
void BSP_FCUART_Init(void)

{

uint8_t u8UartIndex;

#if UART_USED_INSTANCE1 == STD_ON

u8UartIndex = 1U;

FCUART_InitMemory(u8UartIndex);

BSP_FCUART_LL_Init(u8UartIndex,115200U); //初始化 UART参数配置,UART 波特率为115200,使能了UART 接收数据中断,使能了UART

#endif



}
  • BSP_FCUART_LL_Init 函数:程序初始化 UART 参数配置,使能了接收 FIFO,设置了传输数据长度为 8 bit,1bit 停止位,UART 波特率为 115200 ,使能了UART,使能了UART 接收数据中断,中断回调函数为FCUART_RxInterrupt_CallBack 。
        static void BSP_FCUART_LL_Init(uint8_t u8UartIndex, uint32_t u32Baud)

{

FCUART_ErrorType tRetVal;

FCUART_InitType tInitCfg;

uint32_t u32PccFuncClk = 0U;

#if UART_RECEIVE_POLLING == STD_OFF

FCUART_InterruptType tInterruptCfg;



#endif



#if UART_USED_INSTANCE1 == STD_ON

/* get function clock from PCC */

u32PccFuncClk = PCC_GetPccFunctionClock(PCC_CLK_FCUART1);

#endif /* end for UART_USED_INSTANCE1 == STD_ON */



/* check pcc clock if it is valid */

if(u32PccFuncClk != 0U)

{

tInitCfg.bEnRxFifo = TRUE; /、* UART fifo enable */

tInitCfg.u32Baudrate = u32Baud; /* UART baud-rate */

tInitCfg.eBitMode = UART_BITMODE_8; /* UART bit mode */

tInitCfg.bParityEnable = FALSE; /* UART parity check enable */

tInitCfg.eStopBit = UART_STOPBIT_NUM_1; /* UART stop bit number */

tInitCfg.u32ClkSrcHz = u32PccFuncClk; /* UART function clock */

tInitCfg.u32TransmitTimeout = 0xFFFFFFFFU;; /* Transmit timeout tick */



/* start initial UART */

tRetVal = FCUART_Init(u8UartIndex, &tInitCfg);



if(tRetVal == FCUART_ERROR_OK)

{

#if UART_RECEIVE_POLLING == STD_OFF



s_tFCUART_RxMsg.pDatas = s_a2RxDataBuf[u8UartIndex]; /* data buffer must set an array address */

tInterruptCfg.pRxBuf = &s_tFCUART_RxMsg;


tInterruptCfg.bEnErrorInterrupt = false;

tInterruptCfg.pErrorNotify = FCUART_ErrorInterrupt_CallBack;

tInterruptCfg.bEnRxInterrupt = true;

tInterruptCfg.pRxNotify = FCUART_RxInterrupt_CallBack;



tRetVal = FCUART_SetInterrupt(u8UartIndex, &tInterruptCfg);



IntMgr_SetPriority(FCUART_IRQ_INDEX, 0);

IntMgr_EnableInterrupt(FCUART_IRQ_INDEX);



#else

/* clear receive polling data length */

s_aRxDataLen[u8UartIndex] = 0U;

#endif /* end for #if UART_RECEIVE_POLLING == STD_OFF */



tRetVal = FCUART_StartReceive(u8UartIndex);



/* after initial UART, print start message */

tRetVal = FCUART_Printf(u8UartIndex,"System Start!!\n");

}

else

{

}

}

}
  • FCUART_RxInterrupt_CallBack 函数:程序判断 接收 buffer 里的数据是否为 0X55, 如果为 0X55,则能实现 LED 电平的翻转,即 LED 灯灭。
static void FCUART_RxInterrupt_CallBack(uint8_t u8UartIndex, FCUART_DataType *pRxData)

{

FC_OwnMemcpy(&s_a2TxDataBuf[u8UartIndex][s_aRxDataLen[u8UartIndex]], pRxData->pDatas,(uint32_t)pRxData->u8DataLen);

s_aRxDataLen[u8UartIndex] += pRxData->u8DataLen;

if(s_a2RxDataBuf[UART_USER_NUM][0]=0X55) //如果接收的数据为 0X55

{

BSP_GPIO_Toggle(); //LED 灯电平翻转,即 LED 灯灭

}

}​

三、 实验现象

3.1 板子初始状态 LED 灯长亮:

▲ 图 2 FC7300 DEMO BOARD V1 开发板

3.2 上位机发送数据 0X55:

 

▲ 图 3 来自开源串口助手 开源电子网: www.openedv.com

3.3  Debug 状态下,接收 buffer 里的数据:


▲ 图 4 FC7300_SDK_V_0_2_0  FC7300 Uart_Interrupt Demo Debug 数据

3.4  UART 接收到 0X55,板子上 LED 灯灭:


▲ 图 5 FC7300 DEMO BOARD V1 开发板

四、 总结

综上介绍了基于 Flagchip FC7300 UART接收到上位机发送的数据产生接收中断,通过对  FC7300 Uart_Interrupt Demo 程序解析,了解到 UART 可以通过接收上位机发送的数据,对其接收数据进行判断,判断数据为 0X55 时,则能实现 LED 灯的电平翻转,即 LED 灯灭。关于详细 UART 中断介绍及参数配置,请参考 FC7300 Reference Manual V3.0 用户手册及 FC7300_SDK_V_0_2_0 SDK包中的 FC7300 Uart_Interrupt Demo 程序。

五、 参考文献

(1)  FC7300 Reference Manual V3.0、FC7300 Data Sheet V0.1.1

(2)  FC7300_SDK_V_0_2_0

(3) 串口助手:XCOM V2.0 (开源电子网: www.openedv.com

欢迎在博文下方留言评论,我们会及时回复您的问题。如有更多需求,欢迎联系大联大世平集团 ATU 部门:atu.sh@wpi-group.com
作者:Jim Zhang / 张傲

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论