28335scififo中断接收与发送

#include "DSP28x_Project.h"// Device Headerfile and Examples Include File

interrupt void scibTxFifoIsr(void);//fifo发送中断函数

interrupt void scibRxFifoIsr(void);//fifo接收中断函数

void scib_fifo_init(void);//scib fifo模式 初始化函数

char buffer [100];//数据缓冲数组

void main(void)

{

Uint16 i;

InitSysCtrl();//系统时钟等初始化

InitSciGpio();//sci端口初始化

DINT; //关掉中断

InitPieCtrl(); //pie模块初始化

IER = 0x0000;//关cpu中断

IFR = 0x0000;//清cpu中断标志

InitPieVectTable();//初始化中断向量表,  经试验   此句注释掉也可以 ,因为下边对中断向量表进行了重新赋值

EALLOW; // This is needed to write to EALLOW protected registers

PieVectTable.SCIRXINTC = &scibRxFifoIsr; //中断向量表重新赋值(自定义中断函数的入口地址)

PieVectTable.SCITXINTC = &scibTxFifoIsr; //中断向量表重新赋值

EDIS;   // This is needed to disable write to EALLOW protected registers

scib_fifo_init();  // 初始化 SCI-B寄存器配置

for(i = 0; i<100; i++) //缓存初始化

{

buffer[i] = 0;

}    // Enable interrupts required for this. example 中断使能

PieCtrlRegs.PIECTRL.bit.ENPIE = 1;   // Enable the PIE block

PieCtrlRegs.PIEIER8.bit.INTx6=1;     // PIE Group 9, INT3   SCIRXINTB SCIB

PieCtrlRegs.PIEIER8.bit.INTx5=1;     // PIE Group 9, INT4   SCITXINTB SCIB

IER |= M_INT8;   // Enable CPU INT

EINT;//开总中断 INTM    // Step 6. IDLE loop. Just sit and loop forever (optional):

for(;;);

}

interrupt void scibTxFifoIsr(void) //fifo发送中断服务子程序

{

Uint16 i;

for(i=0;i<8; i++)

{

ScicRegs.SCITXBUF=buffer[i];     // Send data 将缓存中的数据发出

}     //ScibRegs.SCIFFTX.bit.TXFFINTCLR=1; //如果在发送中断里清发送中断标志,则会一直不停地发送

PieCtrlRegs.PIEACK.all|=PIEACK_GROUP8;;      // Issue PIE ACK

}

interrupt void scibRxFifoIsr(void)//fifo接收中断服务子程序

{

Uint16 i;

for(i=0; i<8; i++)

{

buffer[i]=ScicRegs.SCIRXBUF.all; // 将fifo中的数据读到缓存

}

ScicRegs.SCIFFTX.bit.TXFFINTCLR=1;  // 很重要 若不清fifo发送中断标志则,不进入发送中断

ScicRegs.SCIFFRX.bit.RXFFINTCLR=1; // 清接收中断标志

PieCtrlRegs.PIEACK.all|=PIEACK_GROUP8;    // Issue PIE ack

}

void scib_fifo_init()

{    ScicRegs.SCICCR.all =0x0007;    // 1 stop bit,  No loopback

// No parity,8 char bits,

// async mode, idle-line protoco

ScicRegs.SCICTL1.all =0x0003;   // enable TX, RX, internal SCICLK,

// Disable RX ERR, SLEEP, TXWAKE

ScicRegs.SCIHBAUD    =0x0001;

ScicRegs.SCILBAUD    =0x00e7;  //波特率9600

ScicRegs.SCIFFTX.bit.SCIFFENA = 1;//使能sci fifo功能

ScicRegs.SCIFFTX.bit.TXFFIENA = 1;//fifo 发送中断使能

ScicRegs.SCIFFTX.bit.TXFFIL = 0; //发送中断级别,此时为上电默认值0

ScicRegs.SCIFFRX.bit.RXFFOVRCLR = 1;//清接收fifo溢出标志

ScicRegs.SCIFFRX.bit.RXFFINTCLR = 1;//清除接收fifo中断标志位

ScicRegs.SCIFFRX.bit.RXFFIENA = 1;//使能fifo 接收中断

ScicRegs.SCIFFRX.bit.RXFFIL = 8; //fifo接收中断级别为8

ScicRegs.SCIFFCT.all=0x00; //为默认值 效果为  禁用自动波特率调整  fifo传送延时为0

ScicRegs.SCIFFTX.bit.TXFIFOXRESET=1;//重新使能发送fifo操作

ScicRegs.SCIFFRX.bit.RXFIFORESET=1;//重新使能接收fifo操作

ScicRegs.SCICTL1.all =0x0023;     // Relinquish SCI from Reset  重启sci

}

时间: 2024-10-07 01:58:42

28335scififo中断接收与发送的相关文章

STM32F10x_硬件I2C主从通信(轮询发送,中断接收)

Ⅰ.写在前面 关注我分享文章的朋友应该知道我在前面讲述过(软件.硬件)I2C主机控制从机EEPROM的例子.在I2C通信主机控制程序是比较常见的一种,可以说在实际项目中,很多应用都会使用到I2C通信.但在实际项目中作为I2C从机的应用相对要少的多,本文主要讲述关于[STM32F10x_硬件I2C主从通信]中STM32作为从机的例子. 在学习本问内容之前,如果对I2C协议还不太了解的朋友请先去了解一下I2C协议,或看我之前关于I2C通信的文章(我微信公众号和博客都有). 关于STM32硬件I2C作

Stm32L0串口中断接收使用

最新在做LoRa的项目,使用的是STM32L072和SX1276,需要做一个串口透传模块,刚开始做demo的时候不考虑功耗,所以串口发送和接收直接使用下列函数执行: HAL_UART_Transmit(&Sensor_UartHandle,(unsigned char *)&readcommand, sizeof(vcom_read_command_t), VCOM_START_DELAY); HAL_UART_Receive(&Sensor_UartHandle,(unsigne

中断方式的发送过程是怎么回事?

有人问过这个问题: “用串口中断接收比较好理解,只要接收缓存接收到数据,标志位就会置位,然后进入中断服务程序读取接收缓存中的数据,但是在发送时,应该是在数据发送出去之后发送标志位才会置位(我是msp430单片机),那么此时等数据发送出去之后进入中断又有什么意义呢?到底如何通过串口中断来发送数据呢?” 通过阅读 STM32 官方库的代码,我找到了答案. 中断发送方式的基本过程是:每发送一个字节,该字节发送完毕引发中断,中断处理程序再发送下一个字节……直到发送完成.      这里有两个细节问题需要

51单片机串口通信(字符串接收和发送)

1 #include<reg52.h> 2 3 //------------------串口通信协议-----------------// 4 /* 5 客户端数据包格式解释(长度恒为15): 6 例如:A01_fmq_01Off___# 7 A--------数据包的开始标记(可以为A到Z,意味着数据包可以有26种) 8 01-----设备代号 9 fmq_01Off___--------指令(长度恒为10),指令的前4个人字符是指令头部,指令的后6个字符是指令尾部 10 #--------

利用串口空闲中断接收数据

1 void USART2_IRQHandler(void) 2 { 3 // 使能串口空闲中断 4 USART_ITConfig(USART2, USART_IT_IDLE , ENABLE); 5 6 if(USART_GetITStatus(USART2,USART_IT_RXNE)==SET) 7 { 8 9 rx_buf[cnt]=USART_ReceiveData(USART2); 10 rx_rxbuf[cnt] = rx_buf[cnt] ;//把接收到的数组存到备用的数组当中,

串口通信基础,接收,发送数据

通信接口背景知识 设备之间通信的方式 一般情况下,设备之间的通信方式可以分成并行通信和串行通信两种.它们的区别是: 串行通信的分类 1.按照数据传送方向,分为: 单工:数据传输只支持数据在一个方向上传输:    半双工:允许数据在两个方向上传输.但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信:它不需要独立的接收端和发送端,两者可以合并一起使用一个端口.    全双工:允许数据同时在两个方向上传输.因此,全双工通信是两个单工通信方式的结合,需要独立的接收端和发送端.

STM32F429基于CUBEMX的串口中断接收

今天要来介绍一下HAL库的串口中断使用方法 首先打开CUBEMX,新建一个STM32工程,博主建立的是F429工程,然后在图形界面中打开一个USART,这里我们使用USART1. 然后进入配置configguration 基本的参数都不用修改,在NVIC中,大概中断使能 然后生成工程即可,打开工程文件.这里要解释一下串口中断接收: 关于串口接收中断 用CUBEMX生成的工程文件中,先开启接收中断使能 __HAL_UART_ENABLE_IT(uartHandle, UART_IT_RXNE);并

Android接收和发送短信

每一部手机都具有短信接收和发送功能,下面我们通过代码来实现接收和发送短信功能. 一.接收短信 1.创建内部广播接收器类,接收系统发出的短信广播 2.从获得的内容中解析出短信发送者和短信内容 3.在Activity中注册广播 4.添加接收短信权限 下面放上具体的代码 activity_main.xml文件用于显示短信发送者号码和显示短信内容 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout

安卓学习之接收、发送短信

短信接收 android中当手机接收到一条短信后,会发送android.provider.Telephony.SMS_RECEIVED 的广播,这条广播中携带有与短信相关的所有数据.每个应用程序都可以在广播接收器里对他监听. 简单的短信接收程序: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main