利用飞思卡尔S12X系列单片机双核功能实现串口空闲中断接收

发布者:EternalBliss最新更新时间:2021-03-25 来源: eefocus关键字:飞思卡尔  串口 手机看文章 扫描二维码
随时随地手机看文章

1. 关于协处理器XGATE

  Freescale公司推出的S12XE系列双核单片机,其内部集成了一个可编程RISC内核的XGATE协处理器(双核),专门用来处理I/O和中断,其性能就相当于一个DMA控制器。由于采用了RISC架构,且处理速率比CPU快一倍,从而提高了系统的实时处理能力,极大的减轻了CPU的工作负荷,让CPU有能多的“精力”用于处理逻辑及计算上的问题,提高了单片机的工作效率。

在这里插入图片描述

2. 协处理器XGATE的工作模式

  协处理器XGATE工作独立,和主CPU之间通过片内的双口RAM实现数据交互。同时,两个内核之间可以相互发送中断请求。当主CPU与XGATE之间存在竞争问题时,单片机采用了8个内部硬件信号量予以解决。


  对于S12XE系列双核单片机来说,默认状态下,协处理器XGATE功能是不开启的。如果要开启XGATE双核功能,主要通过以下两个步骤:


新建工程时,添加设置XGATE工作模式;

利用代码配置、开启XAGTE功能。

3. 软件实现

  关于串口的空闲中断就不在多做说明,这里我们以MC9S12XEP100单片机为例,利用协处理器,实现串口0的空闲中断收发功能,类似于STM32的串口DMA接收功能。


3.1 协处理器XGATE开启及配置

3.1.1 协处理器XGATE初始化配置

  首先在main.c中实现协处理器XGATE的初始化,里面包括初始化协处理器的中断向量表以及注册串口中断并指定由协处理器来实现串口0的中断功能,最后开启协处理器中断。


#define  SCI0_VEC  0xD6 /* 定义SCI0中断向量地址 */


static void SetupXGATE(void) 

{

/* initialize the XGATE vector block and set the XGVBR register to its start address */

XGVBR= (unsigned int)(void*__far)(XGATE_VectorTable - XGATE_VECTOR_OFFSET);

ROUTE_INTERRUPT(SCI0_VEC, 0x81); /* RQST=1 and PRIO=1 */

XGMCTL= 0xFBC1; /* enable XGATE mode and interrupts XGE | XGFRZ | XGIE */

}


3.1.2 协处理器XGATE与CPU间共享内存定义

  我们需要定义一片区域,来实现协处理器XGATE与CPU间的数据共享(类似进程间共享内存),这里需要注意定义的格式。


#pragma DATA_SEG SHARED_DATA

volatile unsigned char sic0_rx[256] = {0};

volatile int sic0_rx_len;


3.1.3 协处理器XGATE串口中断函数编写

  在xaget.cxgate文件中注册串口0的中断函数并通过代码实现。


const XGATE_TableEntry XGATE_VectorTable[] = {


{ErrorHandler, 0x09},  // Channel 09 - Reserved

...

{(XGATE_Function)Sci0_Thread, 0x6B},  // Channel 6B - SCI0      

...

{ErrorHandler, 0x79},  // Channel 79 - IRQ

}

  当XGATE核检测到空闲中断后,向CPU核发送一个中断信号,表示数据接收完成。


interrupt void Sci0_Thread(void)

{

unsigned char tmp;

if(SCI0SR1_RDRF==1) /* 中断接收数据 */

{

sic0_rx[sic0_rx_len] = SCI0DRL;

sic0_rx_len++;

}

if(SCI0SR1_IDLE==1) /* 检测到空闲中断 */

{

tmp = SCI0SR1;

tmp = SCI0DRL;

SCI0SR1_IDLE = 0;

asm SIF; /* 向cpu发送中断信号 */

}

}


  以上就是协处理器串口中断代码的实现,接下来我们继续完善CPU这边数据的处理工作。


3.2 主CPU功能配置

3.2.1 串口初始化配置

  这里我们首先对SCI0进行初始化配置,包括波特率、数据位、校验位、停止位等,最后使能串口发送、空闲中断接收功能。


void sci0_init(dword baud)

{

    dword baudRateReg;                         

    baudRateReg = 24000000/16/baud;         /* 配置波特率,外部晶振24M*/

    SCI0BDH = 0x1f & (baudRateReg >> 8);        

    SCI0BDL = 0xff & baudRateReg;           /* 波特率设置 */

    SCI0CR1 = 0X04;                         /* 无奇偶校验,8位数据位,1位停止位 */

    SCI0CR2 = 0X3C;                         /* 发送空闲中断接收使能*/

}


3.2.2 串口接收中断实现

  在main.c中编写实现串口0的中断处理函数,这里我们只需要等待XGATE的中断信号,接收到中断信号后,说明空闲中断完成,执行用户操作后(我们这里利用一个flag来表示接收到空闲中断),清除协处理器中断标志位。


#pragma CODE_SEG __NEAR_SEG NON_BANKED

interrupt 20 void SCI_Handler(void) 

{

    XGIF1 = 0x0800; /* 清除XAGTE串口0中断标志*/

    sic0_send_flag = 1;

}


  最后我们在主函数中判断空闲中断标志位,将接收到的数据再通过串口0发送出去。


if(sic0_send_flag==1)

{

sci0_send_data(sic0_rx,sic0_rx_len);

sic0_send_flag = 0;

memset(sic0_rx,0,sizeof(sic0_rx));

sic0_rx_len = 0;

}


4. 结果演示

  打开串口调试助手,定时发送一帧数据,可以看到串口正常接收数据并反馈了回来。整个过程中,串口接收数据都由协处理器来完成,主cpu不参与接收过程,只需等待协处理器完成后,发送一个中断信号即可。

在这里插入图片描述

关键字:飞思卡尔  串口 引用地址:利用飞思卡尔S12X系列单片机双核功能实现串口空闲中断接收

上一篇:单片机机器码以及偏移地址的计算
下一篇:Upton谈树莓派RP2040名字的由来

推荐阅读最新更新时间:2024-11-06 03:08

飞思卡尔推首款基于ARM Cortex-M0+处理器的5V 32位MCU
飞思卡尔半导推出业界首款基于ARM Cortex-M0+处理器的5V 32位MCU。全新Kinetis E系列MCU具有强大的系统电磁抗噪能力(过去只有8位和16位MCU具有这种能力),如白色家电和工业应用,同时提供高效率和最佳代码密度。 全新的Kinetis E系列产品是洗碗机、冰箱、家庭和楼宇控制系统、电机控制风机、工业转换器以及通常在高噪声环境中运行的其他设备等应用的理想选择。利用这些器件的耐用设计和32位处理能力,系统设计人员可以只采用一个器件,而不是以前所需的多个MCU。此外,大间距封装选件和高静电放电保护性能支持单层板设计,减少其他电路保护组件的需求,从而降低系统成本。 Kinetis 飞思卡尔MCU业
[单片机]
STM32-自学笔记(12.通过串口与PC通信,发Hello,程序用到的库函数介绍)
1.USART_Init 函数原型:void USART_Init (USART_TypeDef*USARTx , USART_InitTypeDef*USART_InitStruct) 功能:根据USART_InitStruct中指定的参数初始化外设USARTx 参数: USARTx:x可以是1、2、3来选择USART。 USART_InitStruct:指向结构USART_InitTypeDef的指针,包含了外设USART的配置信息。 返回值:无 参数描述:USART_InitTypeDef structure typedef struct { u32 USART_BaudRate; u16 USART_Wo
[单片机]
《初学者C51自学笔记》之串口
并行通信: 通常是将数据字节的各位用多条数据线同时进行传送 。 控制简单、传输速度快;由于传输线较多,长距离传送时成本高且接收方的各位同时接收存在困难。 串行通信: 将数据字节分成一位一位的形式在 一条传输线上逐个地传送。 传输线少,长距离传送时成本低,且可以利用电话网等现成的设备,但数据的传送控制比并行通信复杂。 异步通信: 指通信的发送与接收设备使用各自的时钟控制 数据的发送和接收过程。为使双方的收发协调,要求发送和接 收设备的时钟尽可能一致。 特点:不要求收发双方时钟的严格一 致,实现容易,设备开销较小,但每个字符要附加2~ 3位用于起止位,各帧之间还有间隔,因此传输效率不高。 异步通信是以字符(构成的帧)为单位
[单片机]
《初学者C51自学笔记》之<font color='red'>串口</font>
飞思卡尔芯片驱动下一代汽车车身电子应用
随着驾驶员对车内舒适度和便利性的要求在提高,汽车车身电子产品在保持具有竞争力价格的同时,还需要继续提供性能更高的半导体。飞思卡尔半导体目前开始扩大现已普及的16位S12微控制器(MCU)系列,以优化大量对成本敏感的汽车车身电子应用。先进的S12G器件设计针对应用需求,提供灵活的内存、封装和成本选项。 为汽车电子定造 飞思卡尔S12G系列是需要CAN(控制器区域网络)或LIN(本地互连网络)/SAE J2602通讯的汽车应用的理想之选,这些应用包括车身控制器、车门模块、乘客检测、空调、座椅控制器和照明模块。这款16位S12G系列基于业界公认的S12架构,提供更复杂的应用设计所需的处理功能,保留了代码的有效性,同时还利用了广
[嵌入式]
P89C669 串口C51源程序
#include REG669.H #include STRING.H #include INTRINS.H #include INC\UART.H unsigned char xdata BaudRate = 0; unsigned char xdata Uart0_Counter = 0; unsigned char xdata Uart1_Counter = 0; unsigned char xdata Uart0_Buff ; unsigned char xdata Uart1_Buff ; /************************************************************
[单片机]
基于VB6.0的工控机与智能流量积算仪的串口通信
1、引言   本文主要从应用的角度利用VB6.0的MSComm 控件和MODBUS协议,成功实现了某流量控制系统中工控机与带RS-232输出接口的智能数字流量积算仪之间的串口通信功能。D08-8CZM数字显示表应用于底吹氩流量控制系统中流量的显示,工控机通过读取其显示值作为反馈信号,从而实现流量的闭环控制。 2、D08-8CZM型智能数字流量显示积算仪与串口通信   2.1 硬件构成   D07-12A型质量流量传感器采用毛细管传热温差量热法原理测量气体的质量流量(无需温度压力补偿)。将传感器加热电桥测得的流量信号送入放 大器放大,放大后的流量检测电压与设定电压进行比较,再将差值信号放大后去控制调节阀门,闭环控制流
[嵌入式]
STM32F0单片机快速入门七 串口(UART)操作从轮询到中断
1.从轮询到中断 很多同学都不喜欢用中断,而偏爱用轮询的操作方式。 这是不是和我们的天性有关呢?每个人都喜欢一切尽在掌握中,肯定都不喜欢被打断。我们常常都有这样的经验:正在跟别人说一件事,然后突然有个电话打进来,Call打完后突然记不起来刚才讲到哪了!这种糟糕的体验对我们影响是如此深刻,以至于我们认定机器可能也是这样吧,频繁的中断会不会把事情搞乱呢?好在机器虽然大部分时间都比人笨一些,但在处理这种问题上却能做到一丝不苟。机器在中断来的时候总会老老实实地先把当前正在做的记录下来,然后转去处理中断事件,中断处理完后分毫不差地恢复原来的工作。 仔细想一想,我们是不是也可以在接电话前先用个小本儿记录一下正在讲的事情呢?我们为什么没有这么
[单片机]
飞思卡尔拓展Xtrinsic传感器 推出845x系列
据iSuppli公司报道,由于动作手机、游戏控制器和数码相机销售出现强劲势头,预计2010年全球MEMS市场将会增长11%。大部分此类设备将动作感应技术用于以下功能,如图像稳定、拍打控制、防盗和方向检测。 随着市场对下一代应用(如直观的用户界面和基于位置的服务)的需求在不断增长,在精度和电池使用寿命方面占据优势显得至关重要。 为了满足这些需求,飞思卡尔半导体日前宣布推出一款先进的三轴加速计系列,旨在通过行业领先的分辨率、低噪音和嵌入式功能来延长智能动作设备的电池使用寿命。通过使用MMA845xQ系列,系统设计人员能够在其产品中轻松集成方向检测等标准功能,以及步程计和游戏等更先进的实时应用。 此外,新型飞思卡尔加速计延长了
[传感器]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved