我是靠谱客的博主 沉静乐曲,最近开发中收集的这篇文章主要介绍(四)DSP28335基础教程——SCI串口通信实验(上位机收发显示),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

0 前言

本期的实验目的为:使用核心板上的SCI串口通信功能,在电脑端上位机,输入数字0,1,2,3,4,分别控制五个LED亮灭。
在这里插入图片描述

1 DSP代码

注意:查看代码时双击点进去看,否则会内容不全)。

main.c

/**
*
********************************************************************************************
*
@file
main.c
*
@file
SK Electronics
*
@version
V1.0
*
@date
2020-xx-xx
*
@brief
SCI串口通信中断接发测试
*
*******************************************************************************************
*
@attention
*
实验平台:SK-F28335Mini
核心板
*
CSDN博客:https://blog.csdn.net/weixin_46556696
*
淘宝:https://shop409670932.taobao.com
*/
#include "DSP28x_Project.h"
#include "bsp_sci.h"
#include "bsp_led.h"
#define FLASH_RUN 1
#define SRAM_RUN 2
#define RUN_TYPE FLASH_RUN
#if RUN_TYPE==FLASH_RUN
extern Uint16 RamfuncsLoadStart;
extern Uint16 RamfuncsLoadEnd;
extern Uint16 RamfuncsRunStart;
#endif
unsigned char i=0;
Uint16 ReceivedChar;
//变量定义
char *msg;
//指针
interrupt void scia_Tx_isr(void);
interrupt void scia_Rx_isr(void);
void delay_1ms(Uint16 t);
/**
*
@brief
主函数
*
@parameter
无
*
@return_value
无
*/
void main(void)
{
/*第一步:初始化系统控制:*/
InitSysCtrl();
/*第二步:初始化GPIO口*/
InitGpio();
/* 第三步:清除所有中断 和初始化 PIE 向量表:*/
DINT;// 关闭全局中断
InitPieCtrl();// 初始化 PIE 控制寄存器到默认状态,默认状态是全部 PIE 中断被禁用和标志位被清除
IER = 0x0000;// 禁用 CPU 中断和清除所有 CPU 中断标志位:
IFR = 0x0000;
InitPieVectTable();// 初始化 PIE 中断向量表
// 中断重映射,注册中断程序入口(用户按需求添加)
EALLOW;
PieVectTable.SCITXINTA=&scia_Tx_isr;
PieVectTable.SCIRXINTA=&scia_Rx_isr;
EDIS;
//
/*程序烧录入28335(可选的)*/
#if RUN_TYPE==FLASH_RUN
MemCopy(&RamfuncsLoadStart,&RamfuncsLoadEnd,&RamfuncsRunStart);
InitFlash();
#endif
/* 第四步: 初始化片上外设*/
// InitPeripherals();
//初始化所有外设(本例程不需要)
Sci_Init();//初始化和配置SCIA串口通信
/* 第五步:添加用户功能具体代码*/
LED_GPIO_Config();//配置LED端口
EINT;
ERTM;
msg = "rnnnHello SK Electronics!";
//发送语句
scia_msg(msg);
//发送函数
msg = "rn更详细的DSP基础教程,请关注支持本人博客哈!";
//发送语句
scia_msg(msg);
//发送函数
msg = "rnCSDN博客:https://blog.csdn.net/weixin_46556696";
//发送语句
scia_msg(msg);
//发送函数
msg = "rn淘宝店铺:https://shop409670932.taobao.com";
//发送语句
scia_msg(msg);
//发送函数
msg = "rnnn这是一个串口中断接收回显实验 n"; //发送语句
scia_msg(msg);
msg = "rnrn请在串口调试助手输入单字符:n"; //发送语句
scia_msg(msg);
//发送函数
/*第六步:进入主循环*/
for(;;)
{
}
}
/**
*
@brief
1ms延迟函数
*
@parameter
t
*
@return_value
无
*/
void delay_1ms(Uint16 t)
{
while(t--)
{
DELAY_US(1000);
}
}
interrupt void scia_Tx_isr()
{
PieCtrlRegs.PIEACK.all=M_INT9;
}
interrupt void scia_Rx_isr()
{
// while(SciaRegs.SCIRXST.bit.RXRDY !=1) { } //等待从上位机收到数据
PieCtrlRegs.PIEACK.all=M_INT9;
ReceivedChar = SciaRegs.SCIRXBUF.all;//把接收BUF里的数据赋值给ReceivedChar
msg = "
已发送: ";
//发送语句
scia_msg(msg);
//发送函数
scia_xmit(ReceivedChar);
//发送ReceivedChar
msg = "rnrn请在串口调试助手输入单字符:n"; //发送语句
scia_msg(msg);
//发送函数
/*根据接收到0~4控制对应LED灯*/
switch(ReceivedChar)
{
case '0': LED0_TOGGLE;
break;
case '1': LED1_TOGGLE;
break;
case '2': LED2_TOGGLE;
break;
case '3': LED3_TOGGLE;
break;
case '4': LED4_TOGGLE;
break;
default:
break;
}
}

bsp_led.h

/**
*
********************************************************************************************
*
@file
bsp_led.h
*
@file
SK Electronics
*
@version
V1.0
*
@date
2020-xx-xx
*
@brief
LED应用函数接口头文件
*
*******************************************************************************************
*
@attention
*
实验平台:SK-F28335Mini
核心板
*
CSDN博客:https://blog.csdn.net/weixin_46556696
*
淘宝:https://shop409670932.taobao.com
*/
#ifndef _BSP_LED_H_
#define _BSP_LED_H_
#include "DSP28x_Project.h"
/* 宏带参,可以像内联函数一样使用,低电平亮灯*/
#define LED0(a) if (a)

GpioDataRegs. GPACLEAR.bit.GPIO0=1;
else

GpioDataRegs. GPASET.bit.GPIO0=1
#define LED1(a) if (a)

GpioDataRegs. GPACLEAR.bit.GPIO1=1;
else

GpioDataRegs. GPASET.bit.GPIO1=1
#define LED2(a) if (a)

GpioDataRegs. GPACLEAR.bit.GPIO2=1;
else

GpioDataRegs. GPASET.bit.GPIO2=1
#define LED3(a) if (a)

GpioDataRegs. GPACLEAR.bit.GPIO3=1;
else

GpioDataRegs. GPASET.bit.GPIO3=1
#define LED4(a) if (a)

GpioDataRegs. GPACLEAR.bit.GPIO4=1;
else

GpioDataRegs. GPASET.bit.GPIO4=1
/*定义IO口的宏*/
#define LED0_TOGGLE
GpioDataRegs. GPATOGGLE.bit.GPIO0=1
#define LED0_OFF
GpioDataRegs. GPASET.bit.GPIO0=1
#define LED0_ON
GpioDataRegs. GPACLEAR.bit.GPIO0=1
#define LED1_TOGGLE
GpioDataRegs. GPATOGGLE.bit.GPIO1=1
#define LED1_OFF
GpioDataRegs. GPASET.bit.GPIO1=1
#define LED1_ON
GpioDataRegs. GPACLEAR.bit.GPIO1=1
#define LED2_TOGGLE
GpioDataRegs. GPATOGGLE.bit.GPIO2=1
#define LED2_OFF
GpioDataRegs. GPASET.bit.GPIO2=1
#define LED2_ON
GpioDataRegs. GPACLEAR.bit.GPIO2=1
#define LED3_TOGGLE
GpioDataRegs. GPATOGGLE.bit.GPIO3=1
#define LED3_OFF
GpioDataRegs. GPASET.bit.GPIO3=1
#define LED3_ON
GpioDataRegs. GPACLEAR.bit.GPIO3=1
#define LED4_TOGGLE
GpioDataRegs. GPATOGGLE.bit.GPIO4=1
#define LED4_OFF
GpioDataRegs. GPASET.bit.GPIO4=1
#define LED4_ON
GpioDataRegs. GPACLEAR.bit.GPIO4=1
void LED_GPIO_Config(void);
#endif /*_BSP_LED_H_ */

bsp_led.c

/**
*
********************************************************************************************
*
@file
bsp_led.c
*
@file
SK Electronics
*
@version
V1.0
*
@date
2020-xx-xx
*
@brief
LED应用函数接口
*
*******************************************************************************************
*
@attention
*
实验平台:SK-F28335Mini
核心板
*
CSDN博客:https://blog.csdn.net/weixin_46556696
*
淘宝:https://shop409670932.taobao.com
*/
#include "bsp_led.h"
void LED_GPIO_Config(void)
{
EALLOW;
GpioCtrlRegs.GPAMUX1.bit.GPIO0=0;//普通IO模式
GpioCtrlRegs.GPAPUD.bit.GPIO0=0;//使能内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO0=1;//配置成输出
GpioCtrlRegs.GPAMUX1.bit.GPIO1=0;//普通IO模式
GpioCtrlRegs.GPAPUD.bit.GPIO1=0;//使能内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO1=1;//配置成输出
GpioCtrlRegs.GPAMUX1.bit.GPIO2=0;//普通IO模式
GpioCtrlRegs.GPAPUD.bit.GPIO2=0;//使能内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO2=1;//配置成输出
GpioCtrlRegs.GPAMUX1.bit.GPIO3=0;//普通IO模式
GpioCtrlRegs.GPAPUD.bit.GPIO3=0;//使能内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO3=1;//配置成输出
GpioCtrlRegs.GPAMUX1.bit.GPIO4=0;//普通IO模式
GpioCtrlRegs.GPAPUD.bit.GPIO4=0;//使能内部上拉
GpioCtrlRegs.GPADIR.bit.GPIO4=1;//配置成输出
GpioDataRegs. GPASET.bit.GPIO0=1;
GpioDataRegs. GPASET.bit.GPIO1=1;
GpioDataRegs. GPASET.bit.GPIO2=1;
GpioDataRegs. GPASET.bit.GPIO3=1;
GpioDataRegs. GPASET.bit.GPIO4=1;
EDIS;
}

bsp_sci.h

/**
*
********************************************************************************************
*
@file
bsp_sci.h
*
@file
SK Electronics
*
@version
V1.0
*
@date
2020-xx-xx
*
@brief
串口通信函数接口头文件
*
*******************************************************************************************
*
@attention
*
实验平台:SK-F28335Mini
核心板
*
CSDN博客:https://blog.csdn.net/weixin_46556696
*
淘宝:https://shop409670932.taobao.com
*/
#ifndef _BSP_SCI_H_
#define _BSP_SCI_H_
#include "DSP28x_Project.h"
void Sci_Init(void);
void scia_xmit(int a);//发送字节的函数
void scia_msg(char * msg);//发送数组的函数
#endif /*_BSP_SCI_H_ */

bsp_sci.c

/**
*
********************************************************************************************
*
@file
bsp_sci.c
*
@file
SK Electronics
*
@version
V1.0
*
@date
2020-xx-xx
*
@brief
串口通信应用函数接口
*
*******************************************************************************************
*
@attention
*
实验平台:SK-F28335Mini
核心板
*
CSDN博客:https://blog.csdn.net/weixin_46556696
*
淘宝:https://shop409670932.taobao.com
*/
#include "bsp_sci.h"
/**
*
@brief
初始化SCI串口配置
*
@parameter
无
*
@return_value
无
*/
void Sci_Init(void)
{
//SCI的工作模式和参数需要用户在后面的学习中,深入的了解一个寄存器底层相关的资料了,多看看芯片手册和寄存器的意思。
//因为28335的寄存器太多了,所以在以后的学习过程中,就不会对寄存器进行详细的注释了。
InitSciaGpio();
SciaRegs.SCICCR.all=0x07;// 1 stop bit,
No loopback
// No parity,8 char bits
// async mode, idle-line protocol
SciaRegs.SCICTL1.all=0x03;// enable TX, RX, internal SCICLK,
#if(CPU_FRQ_150MHZ)
SciaRegs.SCIHBAUD=0x0001;// 9600 baud @LSPCLK = 37.5MHz.
SciaRegs.SCILBAUD=0x00E7;
#endif
#if(CPU_FRQ_100MHZ)
SciaRegs.SCIHBAUD=0x0001;// 9600 baud @LSPCLK = 20MHz.
SciaRegs.SCILBAUD=0x0044;
#endif
SciaRegs.SCICTL2.bit.RXBKINTENA=1;
SciaRegs.SCICTL2.bit.TXINTENA=1;
//SciaRegs.SCICCR.bit.LOOPBKENA=1;
SciaRegs.SCICTL1.bit.SWRESET=1;
PieCtrlRegs.PIECTRL.bit.ENPIE=1;
IER|=M_INT9;
PieCtrlRegs.PIEIER9.bit.INTx1=1;
PieCtrlRegs.PIEIER9.bit.INTx2=1;
}
void scia_xmit(int a)//发送字节的函数
{
while (SciaRegs.SCICTL2.bit.TXRDY == 0) {}
SciaRegs.SCITXBUF=a;
}
void scia_msg(char * msg)//发送数组的函数
{
int i;
i = 0;
SciaRegs.SCICTL2.bit.TXINTENA=0;
while(msg[i] != '')
{
scia_xmit(msg[i]);
i++;
}
SciaRegs.SCICTL2.bit.TXINTENA=1;
}

2 结论

通过此例程,上位机发送单字符的数字 0,1,2,3,4 可以分别控制对应LED状态反转。大家可以尝试一下!
更详细的讲解请关注公众号:电力电子学社

QQ群:945257491 一起讨论!

最后

以上就是沉静乐曲为你收集整理的(四)DSP28335基础教程——SCI串口通信实验(上位机收发显示)的全部内容,希望文章能够帮你解决(四)DSP28335基础教程——SCI串口通信实验(上位机收发显示)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部