微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > DSP学习交流 > dsp2812的串口控制寄存器不能写入是什么情况

dsp2812的串口控制寄存器不能写入是什么情况

时间:10-02 整理:3721RD 点击:

我是PMSM3_4控制电机的程序,想在程序里面加上串口发送数据的代码,但是不论怎么改都不行。
我找到了串口通信的例程,在原串口通信工程里串口是正常工作的。我把正常工作的串口通信的c文件的内容全部覆盖掉控制电机程序的c文件内容,再那个工程里运行时候看到还是设置不了串口寄存器。GPIO的管脚是可以配置的,但就是不能设置寄存器
这是什么问题啊?我只是想简单的发送下程序里面的数据而已。也不需要什么别的功能,但为啥寄存器都写不了,什么情况
这是串口通信的小例子。为什么在不同的工程下有不同的结果呢?为什么在我控制电机的工程下就不能正常写入串口寄存器呢
                          
#include "DSP281x_Device.h"
#include "DSP281x_Examples.h"char   
send_buff = 0x00;       //发送缓冲
char    rece_buff = 0x00;       //接收缓冲
interrupt void SCIRXINT_isr(void);        //中断1中断子程
void Initsci(void)                 //UART初始化子程序
{                                                     
SciaRegs.SCICCR.all=0x0007;         
//1位停止位,用奇校验,禁用回馈测试,                                          
//普通协议模式,8位数据位           
SciaRegs.SCICTL1.all=0x0003;         
//禁止接收错误中断,禁用传输唤醒模式,                                          
//禁用休眠模式,使能数据发送和接收                 
SciaRegs.SCIHBAUD=0x01;         
SciaRegs.SCILBAUD=0xE7;              //150M CLKOUT,波特率为9600 = CLKOUT/(BRR+1)*8                                           //BRR=1E7H      
SciaRegs.SCICTL2.all=0x0002;          //使用接收中断,禁用发送中断         
SciaRegs.SCIPRI.all=0x0010;           //高中断优先级,仿真挂起时完成当前操作         
SciaRegs.SCICTL1.all =0x0023;         // Relinquish SCI from Reset      
}               
                 
interrupt void SCIRXINT_isr()           //中断子程序
{              
Uint16 k;         
k=SciaRegs.SCIRXBUF.all;     
asm(" nop ");   
SciaRegs.SCITXBUF=k;         
asm(" nop ");                  
PieCtrlRegs.PIEACK.all = PIEACK_GROUP9;     
SciaRegs.SCIFFRX.bit.RXFFINTCLR = 1;        // clear Receive interrupt flag            
}

void main(void){   
// PLL, WatchDog, enable Peripheral Clocks// This example function is found in the DSP281x_SysCtrl.c file.   
InitSysCtrl();   
EALLOW;   
SysCtrlRegs.LOSPCP.all=0x0002;   
EDIS;   

// Setup only the GP I/O only for SCI-A  functionality   
EALLOW;   
GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1;   GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1;//将GPIOF端口上的4,5管脚设置成SCIA外设功能                                                                                                                                                                     
EDIS;

// Disable CPU interrupts   
DINT;
// Initialize the PIE control registers to their default state.   
InitPieCtrl();// Disable CPU interrupts and clear all CPU interrupt flags:  
IER = 0x0000;   
IFR = 0x0000;// Initialize the PIE vector table with pointers to the shell Interrupt  
InitPieVectTable();      Initsci();              //初始化UART设置寄存器      
EALLOW;  // This is needed to write to EALLOW protected registers   PieVectTable.RXAINT = &SCIRXINT_isr;   
EDIS;    // Enable interrupts required for this example   
PieCtrlRegs.PIECRTL.bit.ENPIE = 1;   // Enable the PIE block   
PieCtrlRegs.PIEIER9.bit.INTx1=1;     // PIE Group 9, INT1  
IER |= 0x100;        // Enable CPU INT   
EINT;        
while(1);      
}

小编这个代码可以使用论坛的代码编辑器插入,否则格式太乱了,没有人愿意挑战。

  1. // Setup only the GP I/O only for SCI-A  functionality   
  2. EALLOW;   
  3. GpioMuxRegs.GPFMUX.bit.SCITXDA_GPIOF4 = 1;   GpioMuxRegs.GPFMUX.bit.SCIRXDA_GPIOF5 = 1;//将GPIOF端口上的4,5管脚设置成SCIA外设功能                                                                                                                                                                     
  4. EDIS;

复制代码


对于SCI的GPIO的配置,似乎不够哦,好需要上拉及异步输出配置
建议调用controlsuit的SCI例程进行修改,你的程序也不复杂,改改容易的
再跑断点看看

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top