打印

瑞泰 ICETEK-VC5509-A 串行示例程序 通信失败

[复制链接]
570|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
羊一惊|  楼主 | 2016-7-4 11:15 | 只看该作者
程序如下

Lab0308-uart.zip

584.22 KB

使用特权

评论回复
板凳
羊一惊|  楼主 | 2016-7-4 11:16 | 只看该作者
本帖最后由 羊一惊 于 2016-7-4 11:19 编辑

C:\Users\Jing\Desktop\P60704-110709

QQ截图20160704111846.jpg (209.1 KB )

QQ截图20160704111846.jpg

QQ截图20160704111918.jpg (173.88 KB )

QQ截图20160704111918.jpg

QQ截图20160704111935.jpg (139.71 KB )

QQ截图20160704111935.jpg

使用特权

评论回复
地板
羊一惊|  楼主 | 2016-7-4 12:30 | 只看该作者
#define UART_BASE_ADDR                        0x400400             //片选基地址
#define RBR                                *((int *)(UART_BASE_ADDR+0)) //接受缓冲寄存器,只读
#define THR                                *((int *)(UART_BASE_ADDR+0)) //发送保持寄存器,只写       
#define IER                                *((int *)(UART_BASE_ADDR+1)) //中断使能寄存器,读写
#define IIR                                *((int *)(UART_BASE_ADDR+2)) //中断标志寄存器,只读       
#define FCR                                *((int *)(UART_BASE_ADDR+2)) //FIFO控制寄存器,只写       
#define LCR                                *((int *)(UART_BASE_ADDR+3)) //线路控制寄存器,读写
#define MCR                                *((int *)(UART_BASE_ADDR+4)) //MODEM控制寄存器,读写
#define LSR                                *((int *)(UART_BASE_ADDR+5)) //线路状态寄存器,只读
#define MSR                                *((int *)(UART_BASE_ADDR+6)) //MODEM状态寄存器,只读
#define SCR                                *((int *)(UART_BASE_ADDR+7)) //暂存寄存器,读写
#define DLL                                *((int *)(UART_BASE_ADDR+0)) //低位除数寄存器,读写
#define DLM                                *((int *)(UART_BASE_ADDR+1)) //高位除数寄存器,读写
void TMCR_reset( void ); //时钟设置函数
void EMIF_init(void);    //外部存储器接口初始化函数
void wait(int nWait);    //等待函数
char cString[17]={ "Hello PC!,Over|" },cReceive,cBuffer[17],cAnswer[16]={"Oh,you say"};
//
int bReceive,nLen;
main()
{
        unsigned int uWork;  //用来存放将线路状态寄存器中的值
        int i,k;
        bReceive=0;
    TMCR_reset();    //时钟设置
    PLL_Init(12);
    EMIF_init();    //外部存储器接口初始化
   
           LCR = 0x80;     //数据长度5位,1个停止位,奇偶校验无效,访问除数和功能切换寄存器
        DLL = 0x18;     //低位除数寄存器
        DLM = 0x00;     //高位除数寄存器,波特率9600
        LCR = 0x03;     //数据长度8位,1个停止位,奇偶校验无效,访问其余换寄存器   
        FCR = 0x01;
        MCR = 0x00;
        MSR = 0x00;
        IER = 0x00;     //接收中断禁止,发送中断禁止,接受错误中断禁止,MODEM中断禁止  

    for(;;)         //循环运行,直至掉电或关闭程序
    {  
                if ( bReceive==0 )            //若bReceive为0
                {
                        for ( i=0;i<16;i++ )  //循环运行16次
                        {
                                do
                                {
                                        uWork=LSR;    //将线路状态寄存器中的值赋给uWork
                                } while ( uWork&0x040 != 0x040 ); //当发送保持寄存器非空时
                                THR=cString[i];       //将字符串cString中的cString[i]放入发送保持寄存器
                                wait(128);            //等待,k=64*128
                        }
                }
                else                          //若bReceive不为0        
                {
                        for ( i=0;i<10;i++ )  //循环运行10次      
                        {
                                do
                                {
                                        uWork=LSR;    //将线路状态寄存器中的值赋给uWork
                                } while ( uWork&0x040 != 0x040 ); //当发送保持寄存器非空时
                                THR=cAnswer[i];       //将字符串cAnswer中的cAnswer[i]放入发送保持寄存器
                                wait(128);            //等待,k=64*128               
                        }
                        do
                        {
                                uWork=LSR;            //将线路状态寄存器中的值赋给uWork
                        } while ( uWork&0x040 != 0x040 ); //当发送保持寄存器非空时
                        THR='\"';                      //将字符串'\"'放入发送保持寄存器
                        for ( i=0;i<nLen;i++ )        //循环运行nLen次
                        {
                                do
                                {
                                        uWork=LSR;    //将线路状态寄存器中的值赋给uWork
                                } while ( uWork&0x040 != 0x040 ); //当发送保持寄存器非空时
                                THR=cBuffer[i];       //将字符串cBuffer中的cBuffer[i]放入发送保持寄存器
                                wait(128);            //等待,k=64*128               
                        }
                        do
                        {
                                uWork=LSR;            //将线路状态寄存器中的值赋给uWork
                        } while ( uWork&0x040 != 0x040 ); //当发送保持寄存器非空时
                        THR='\"';
                        wait(128);                    //等待,k=64*128               
                        for ( i=9;i<16;i++ )               //循环运行7次
                        {
                                do
                                {
                                        uWork=LSR;    //将线路状态寄存器中的值赋给uWork
                                } while ( uWork&0x040 != 0x040 ); //当发送保持寄存器非空时
                                THR=cString[i];       //将字符串cString中的cString[i]放入发送保持寄存器
                                wait(128);            //等待,k=64*128               
                        }
                }
                k=0; bReceive=0;
                while ( 1 )
                {
                        do
                        {
                                uWork=LSR;            //将线路状态寄存器中的值赋给uWork
                        } while ( (uWork&1)==0 );     //当接收数据缓冲器为空时
                        cReceive=RBR;                 //将接收缓冲寄存器中的值赋给字符串cReceive
                        cBuffer[k]=cReceive&0x0ff;
                        if ( cReceive=='.' )
                        {
                                cBuffer[k+1]='\0';
                                nLen=k+1;
                                bReceive=1;
                                break;
                        }
                        k++; k%=16;
                }
    }        
   
}
void EMIF_init(void)    //外部存储器接口初始化函数
{
   
    ioport unsigned int *ce21  =(unsigned int *)0x809;
    *ce21   = 0x1fff;
}

void TMCR_reset( void ) //时钟设置函数
{
    ioport unsigned int *TMCR_MGS3=(unsigned int *)0x07FE;   
    ioport unsigned int *TMCR_MM =(unsigned int *)0x07FF;   
    *TMCR_MGS3 =0x510;
    *TMCR_MM   =0x000;


}
void wait(int nWait)   //等待函数
{
        int i,j,k=0;
        for ( i=0;i<nWait;i++ )
                for ( j=0;j<64;j++ )
                        k++;
}

使用特权

评论回复
5
羊一惊|  楼主 | 2016-7-4 12:31 | 只看该作者
程序没有任何改动,只是加了备注

使用特权

评论回复
6
vivilzb1985| | 2016-7-5 10:46 | 只看该作者
这个先看下你的串口的波特率设置的是否两边一致的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

5

帖子

0

粉丝