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

相关文章

Python itertools中accumulate函数用法及使用运用详细讲解

《Pythonitertools中accumulate函数用法及使用运用详细讲解》:本文主要介绍Python的itertools库中的accumulate函数,该函数可以计算累积和或通过指定函数... 目录1.1前言:1.2定义:1.3衍生用法:1.3Leetcode的实际运用:总结 1.1前言:本文将详

轻松上手MYSQL之JSON函数实现高效数据查询与操作

《轻松上手MYSQL之JSON函数实现高效数据查询与操作》:本文主要介绍轻松上手MYSQL之JSON函数实现高效数据查询与操作的相关资料,MySQL提供了多个JSON函数,用于处理和查询JSON数... 目录一、jsON_EXTRACT 提取指定数据二、JSON_UNQUOTE 取消双引号三、JSON_KE

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

Java function函数式接口的使用方法与实例

《Javafunction函数式接口的使用方法与实例》:本文主要介绍Javafunction函数式接口的使用方法与实例,函数式接口如一支未完成的诗篇,用Lambda表达式作韵脚,将代码的机械美感... 目录引言-当代码遇见诗性一、函数式接口的生物学解构1.1 函数式接口的基因密码1.2 六大核心接口的形态学

Java中Springboot集成Kafka实现消息发送和接收功能

《Java中Springboot集成Kafka实现消息发送和接收功能》Kafka是一个高吞吐量的分布式发布-订阅消息系统,主要用于处理大规模数据流,它由生产者、消费者、主题、分区和代理等组件构成,Ka... 目录一、Kafka 简介二、Kafka 功能三、POM依赖四、配置文件五、生产者六、消费者一、Kaf

Python手搓邮件发送客户端

《Python手搓邮件发送客户端》这篇文章主要为大家详细介绍了如何使用Python手搓邮件发送客户端,支持发送邮件,附件,定时发送以及个性化邮件正文,感兴趣的可以了解下... 目录1. 简介2.主要功能2.1.邮件发送功能2.2.个性签名功能2.3.定时发送功能2. 4.附件管理2.5.配置加载功能2.6.

解决Cron定时任务中Pytest脚本无法发送邮件的问题

《解决Cron定时任务中Pytest脚本无法发送邮件的问题》文章探讨解决在Cron定时任务中运行Pytest脚本时邮件发送失败的问题,先优化环境变量,再检查Pytest邮件配置,接着配置文件确保SMT... 目录引言1. 环境变量优化:确保Cron任务可以正确执行解决方案:1.1. 创建一个脚本1.2. 修

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

详解Spring Boot接收参数的19种方式

《详解SpringBoot接收参数的19种方式》SpringBoot提供了多种注解来接收不同类型的参数,本文给大家介绍SpringBoot接收参数的19种方式,感兴趣的朋友跟随小编一起看看吧... 目录SpringBoot接受参数相关@PathVariable注解@RequestHeader注解@Reque