5、DSP28335 串口发送接收FIFO中断,自定义printf函数

2024-02-04 11:44

本文主要是介绍5、DSP28335 串口发送接收FIFO中断,自定义printf函数,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#include "uart.h"unsigned char data[8];void MyUartInit(Uint32 baud)
{unsigned char scihbaud = 0;unsigned char scilbaud = 0;Uint16 scibaud = 0;EALLOW;InitSciaGpio();EDIS;EALLOW;//0:一位停止位;1:两位停止位SciaRegs.SCICCR.bit.STOPBITS = 0;//0:偶校验;1:奇校验SciaRegs.SCICCR.bit.PARITY = 0;//0:校验位失能,1:校验位使能SciaRegs.SCICCR.bit.PARITYENA = 0;//0:回环测试功能失能;1:回环测试功能使能SciaRegs.SCICCR.bit.LOOPBKENA = 0;//SciaRegs.SCICCR.bit.ADDRIDLE_MODE = 0;//字长:8位字长SciaRegs.SCICCR.bit.SCICHAR = 0x7;
//  SciaRegs.SCICCR.all = 0x0007;//该DSP主频为 60MHz,通过LOSPCP寄存器将系统时钟分频为低速时钟//在main函数的InitSysCtrl()里面配置了//SysCtrlRegs.LOSPCP.all = 0x0002; 4分频 15MHz 串口时钟//15M时钟 / (8 * baud) - 1, 分高八位和低八位scibaud = 15000000 / (8 * baud) - 1;scihbaud = scibaud >> 8;scilbaud = scibaud & 0xff;//设置波特率SciaRegs.SCIHBAUD = scihbaud;   //高8位SciaRegs.SCILBAUD = scilbaud;   //低8位//发送接收使能,1:使能;0:失能SciaRegs.SCICTL1.bit.RXENA = 1;SciaRegs.SCICTL1.bit.TXENA = 1;
//  SciaRegs.SCICTL1.all = 0x0003;//接收中断使能,这里使用FIFO接收中断,就不用配置
//  SciaRegs.SCICTL2.bit.RXBKINTENA = 1;//0:FIFO失能;1:FIFO使能SciaRegs.SCIFFTX.bit.SCIFFENA = 1;//0:复位SCI接收和发送通道;1:SCI的FIFO恢复发送和接收SciaRegs.SCIFFTX.bit.SCIRST = 1;//0:失能FIFO发送中断;1:使能FIFO发送中断SciaRegs.SCIFFTX.bit.TXFFIENA = 0;//设置FIFO发送中断深度SciaRegs.SCIFFTX.bit.TXFFIL = 0x00;//0:无影响;1:清除TXFFINT标志7位SciaRegs.SCIFFTX.bit.TXFFINTCLR = 1;//0:重置FIFO指针和保持复位;1:重启发送FIFO操作SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 0;//0:无影响;1:清除RXFFOVF标志第15位SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1;//0:无影响;1:清除RXFFINT标志第7位SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;//0:重置FIFO指针和保持复位;1:重启接收FIFO操作SciaRegs.SCIFFRX.bit.RXFIFORESET = 0;//0:接收FIFO中断失能;1:接收FIFO中断使能SciaRegs.SCIFFRX.bit.RXFFIENA = 1;//FIFO接收中断深度SciaRegs.SCIFFRX.bit.RXFFIL = 0x08;SciaRegs.SCIFFCT.all = 0x0000;SciaRegs.SCICTL1.all = 0x0023;SciaRegs.SCIFFTX.bit.TXFIFOXRESET = 1;SciaRegs.SCIFFRX.bit.RXFIFORESET = 1;PieVectTable.SCIRXINTA = &SciRxFifoIsr;EDIS;//使能PIE、CPU中断PieCtrlRegs.PIECTRL.bit.ENPIE = 1;PieCtrlRegs.PIEIER9.bit.INTx1 = 1;IER |= M_INT9;EINT;ERTM;
}void UartSendByte(Uint32 a)
{while (SciaRegs.SCIFFTX.bit.TXFFST != 0);SciaRegs.SCITXBUF = a;
}void UartSendArray(unsigned char *Array, Uint16 ArrayLength)
{Uint16 i;for(i = 0; i < ArrayLength; i++){UartSendByte(Array[i]);}
}void UartSendString(char *msg)
{Uint32 i = 0;while(msg[i] != '\0'){UartSendByte(msg[i]);i++;}
}void uart_printf(char * fmt, ...) //自定义变参函数
{char *  arg_ptr;unsigned int  i ,  len;static char write_buf[MAX_WRITE_LEN];va_start(arg_ptr, fmt);len = vsprintf((char *)write_buf, fmt, arg_ptr);va_end(arg_ptr);for (i = 0; i < len; i++){if ( '\0' != write_buf[i] ){while (SciaRegs.SCIFFTX.bit.TXFFST != 0); //使用SCIASciaRegs.SCITXBUF=write_buf[i];}}
}interrupt void SciRxFifoIsr(void)
{Uint16 i;for(i = 0; i < 8; i++){data[i] = SciaRegs.SCIRXBUF.all;}SciaRegs.SCIFFRX.bit.RXFFOVRCLR = 1;SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;PieCtrlRegs.PIEACK.all |= PIEACK_GROUP9;
}

注:自定义的uart_printf函数需要修改cmd文件中分区的大小,根据报错信息修改即可,烧录到Flash和ram的两种方法,cmd文件也不同。

这篇关于5、DSP28335 串口发送接收FIFO中断,自定义printf函数的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/677382

相关文章

Spring Security自定义身份认证的实现方法

《SpringSecurity自定义身份认证的实现方法》:本文主要介绍SpringSecurity自定义身份认证的实现方法,下面对SpringSecurity的这三种自定义身份认证进行详细讲解,... 目录1.内存身份认证(1)创建配置类(2)验证内存身份认证2.JDBC身份认证(1)数据准备 (2)配置依

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

shell编程之函数与数组的使用详解

《shell编程之函数与数组的使用详解》:本文主要介绍shell编程之函数与数组的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录shell函数函数的用法俩个数求和系统资源监控并报警函数函数变量的作用范围函数的参数递归函数shell数组获取数组的长度读取某下的

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

MySQL中FIND_IN_SET函数与INSTR函数用法解析

《MySQL中FIND_IN_SET函数与INSTR函数用法解析》:本文主要介绍MySQL中FIND_IN_SET函数与INSTR函数用法解析,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一... 目录一、功能定义与语法1、FIND_IN_SET函数2、INSTR函数二、本质区别对比三、实际场景案例分

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序