专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
DSP
SCI中断方式
2019-07-13 16:53
发布
生成海报
站内文章
/
DSP
10324
0
1614
//===========================================================================
//
//文件名称:SCI_interrupt.c
//
//功能描述:DSP28SCI-同计算机通信,采用超级中断接受数据
//间隔2秒DSP向计算机发送字符"2812-UARTisfine!"
//SCI配置:波特率9600,数据长度8Bit,无极性,1位停止位
//TX缓冲空触发SCI-TXINT中断
//CPUCORE定时器0中断出发第一次传输
//===========================================================================
#include"DSP281x_Device.h"
//使用的函数原型声明
void
Gpio_select(
void
);
void
InitSystem(
void
);
void
SCI_Init(
void
);
interrupt
void
cpu_timer0_isr(
void
);
interrupt
void
SCI_TX_isr(
void
);
//全局变量
char
message[]={
"TheF2812-UARTisfine!/n/r"
};
int
index=0;
//字符串指针
void
main(
void
)
{
InitSystem();
//初始化DSP内核寄存器
Gpio_select();
//配置GPIO复用功能寄存器
InitPieCtrl();
//调用外设中断扩展初始化单元PIE-unit(代码:DSP281x_PieCtrl.c)
InitPieVectTable();
//初始化PIEvector向量表(代码:DSP281x_PieVect.c)
//重新映射PIE-Timer0的中断
EALLOW;
//解除寄存器保护
PieVectTable.TINT0=&cpu_timer0_isr;
EDIS;
//使能寄存器保护
InitCpuTimers();
//配置CPU-Timer0周期50ms:
//150MHzCPU频率,50000微妙中断周期
ConfigCpuTimer(&CpuTimer0,150,50000);
//使能PIE内的TINT0:Group1interrupt7
PieCtrlRegs.PIEIER1.bit.INTx7=1;
//使能CPUINT1(连接到CPU-Timer0中断)
IER=1;
EALLOW;
//解除寄存器保护
PieVectTable.TXAINT=&SCI_TX_isr;
EDIS;
//使能寄存器保护
//使能PIE内的SCI_A_TX_INT中断
PieCtrlRegs.PIEIER9.bit.INTx2=1;
//使能CPUINT9
IER|=0x100;
//全局中断使能和更高优先级的实时调试事件
EINT;
//全局中断使能INTM
ERTM;
//使能实时调试中断DBGM
CpuTimer0Regs.TCR.bit.TSS=0;
//启动定时器0
SCI_Init();
while
(1)
{
while
(CpuTimer0.InterruptCount<40)
//等待50ms*40
{
EALLOW;
SysCtrlRegs.WDKEY=0xAA;
//看门狗控制
EDIS;
}
CpuTimer0.InterruptCount=0;
//复位计数器
index=0;
SciaRegs.SCITXBUF=message[index++];
}
}
void
Gpio_select(
void
)
{
EALLOW;
GpioMuxRegs.GPAMUX.all=0x0;
//所有GPIO端口配置为I/O
GpioMuxRegs.GPBMUX.all=0x0;
GpioMuxRegs.GPDMUX.all=0x0;
GpioMuxRegs.GPFMUX.all=0x0;
GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5=1;
//配置SCI-RX
GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4=1;
//配置SCI-TX
GpioMuxRegs.GPEMUX.all=0x0;
GpioMuxRegs.GPGMUX.all=0x0;
GpioMuxRegs.GPADIR.all=0x0;
//GPIOPORT配置为输入
GpioMuxRegs.GPBDIR.all=0x00FF;
//GPIOPortB15-B8配置为输入,B7-B0配置为输出
GpioMuxRegs.GPDDIR.all=0x0;
//GPIOPORT配置为输入
GpioMuxRegs.GPEDIR.all=0x0;
//GPIOPORT配置为输入
GpioMuxRegs.GPFDIR.all=0x0;
//GPIOPORT配置为输入
GpioMuxRegs.GPGDIR.all=0x0;
//GPIOPORT配置为输入
GpioMuxRegs.GPAQUAL.all=0x0;
//设置所有GPIO输入的量化值等于0
GpioMuxRegs.GPBQUAL.all=0x0;
GpioMuxRegs.GPDQUAL.all=0x0;
GpioMuxRegs.GPEQUAL.all=0x0;
EDIS;
}
void
InitSystem(
void
)
{
EALLOW;
SysCtrlRegs.WDCR=0x00AF;
//配置看门狗
//0x00E8禁止看门狗,预定标系数Prescaler=1
//0x00AF不禁止看门狗,预定标系数Prescaler=64
SysCtrlRegs.SCSR=0;
//看门狗产生复位
SysCtrlRegs.PLLCR.bit.DIV=10;
//配置处理器锁相环,倍频系数为5
SysCtrlRegs.HISPCP.all=0x1;
//配置高速外设时钟分频系数:2
SysCtrlRegs.LOSPCP.all=0x2;
//配置低速外设时钟分频系数:4
//使用的外设时钟时钟设置:
//一般不使用的外设的时钟禁止,降低系统功耗
SysCtrlRegs.PCLKCR.bit.EVAENCLK=0;
SysCtrlRegs.PCLKCR.bit.EVBENCLK=0;
SysCtrlRegs.PCLKCR.bit.SCIAENCLK=1;
//使能SCI模块的时钟
SysCtrlRegs.PCLKCR.bit.SCIBENCLK=0;
SysCtrlRegs.PCLKCR.bit.MCBSPENCLK=0;
SysCtrlRegs.PCLKCR.bit.SPIENCLK=0;
SysCtrlRegs.PCLKCR.bit.ECANENCLK=0;
SysCtrlRegs.PCLKCR.bit.ADCENCLK=0;
EDIS;
}
void
SCI_Init(
void
)
{
SciaRegs.SCICCR.all=0x0007;
//1bit停止位无循环模式
//无极性,字符长度:8bits,
//异步模式,空闲线协议
SciaRegs.SCICTL1.all=0x0003;
//使能TX,RX,内部SCICLK,
//禁止RXERR,SLEEP,TXWAKE
SciaRegs.SCIHBAUD=487>>8;
//波特率:9600(LSPCLK=37.5MHz);
SciaRegs.SCILBAUD=487&0x00FF;
SciaRegs.SCICTL2.bit.TXINTENA=1;
//使能SCI发送中断
SciaRegs.SCICTL1.all=0x0023;
//使SCI退出复位
}
interrupt
void
cpu_timer0_isr(
void
)
{
CpuTimer0.InterruptCount++;
//每个定时器中断清除一次看门狗计数器
EALLOW;
SysCtrlRegs.WDKEY=0x55;
//看门狗控制
EDIS;
//响应中断并允许系统接收更多的中断
PieCtrlRegs.PIEACK.all=PIEACK_GROUP1;
}
//===========================================================================
//SCI_A发送中断服务程序
//发送字符串message[]
//===========================================================================
interrupt
void
SCI_TX_isr(
void
)
{
if
(index<26)SciaRegs.SCITXBUF=message[index++];
//重新初始化PIE为下一次SCI-ATX准备接收下一次中断
PieCtrlRegs.PIEACK.all=0x0100;
//响应中断
}
//===========================================================================
//代码结束.
//===========================================================================
Ta的文章
更多
>>
MSI微星笔记本电源模式与变档模式探索
0 个评论
SCI中断方式
0 个评论
热门文章
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮