Board logo

标题: DSP56F801A60串口程序请教 [打印本页]

作者: strongchen    时间: 2006-6-8 11:42

看一下你的波特率与SIC的时钟频率是否匹配。
作者: jjl3    时间: 2006-6-8 12:41     标题: DSP56F801A60串口程序请教

我用PE产生一个串口程序可以正常与PC通讯,


我仿照那个程序的参数自己写了个程序却不能正常与PC通讯,是乱码.


请大侠帮我看看!谢谢!


波特率9600


 


 


#include"56801.h"


typedef unsigned int word;
void SCI0_SendChar(unsigned char);


void main(void)
{


 asm
 {
   bfset             #$40,XFIU_CNTL
   bfset             #$103F,X:ISOCTL
   bfclr             #$FFBF,XFIU_CNTL
   bfclr             #$FFFB,XLLCR
 };
 
 while(*((word *)(PLLSR)) & 0x4 ){}
 
 asm
 { 
      move              #$81,XLLCR
      move              #0,X:CLKOSR
      move              #$11D,XLLDB
    };
 
 while(!(*((word *)(PLLSR)) & 0x20)){}
 
 asm
 {
   move              #$82,XLLCR
 
      bfclr             #6,X:GPIO_A_PER
      bfset             #6,X:GPIO_A_DDR
      bfclr             #6,X:GPIO_A_DR
   
      move              #0,X:SYS_CTRL
      orc               #3,X:GPIO_B_PER
      move              #0,X:SCI0_SCICR
      move              #$00c3,X:SCI0_SCIBR
      orc               #8,X:SCI0_SCICR
      bfset             #$0100,SR
      bfclr             #$0200,SR
 };
     
      SCI0_SendChar('H');
   SCI0_SendChar('e');
   SCI0_SendChar('l');
   SCI0_SendChar('l');
   SCI0_SendChar('o');
   SCI0_SendChar('!');
   SCI0_SendChar('');
 
 while(1)
 {
  
 }
}


void SCI0_SendChar(unsigned char chr)
{
    while(!(*((word *)(SCI0_SCISR)) & 0x8000)){}
    *((word *)(SCI0_SCIDR)) = chr;
}

[此贴子已经被作者于2006-6-8 12:41:48编辑过]


作者: jjl3    时间: 2006-6-8 12:48

有关波特率寄存器值的设定我都是从由PE产生的程序中得来的.
为什么PE产生的程序运行正确,而这个程序不行(
作者: seuafu2005    时间: 2006-6-9 10:03

还是按strongchen说的看看。你用PE得到的时钟频率是否和你自己写的频率一样?

作者: 文天祥    时间: 2009-1-31 18:02

我也觉得如果使用内部晶振的话,一定要注意总线频率是否与PE中的总线频率一样 如果不一样就得进行等比例变换






欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0