zoukankan      html  css  js  c++  java
  • UART的调试

      串口是很久之前做的了,映像最深的就是子函数的调用导致完好的程序罢工。郁闷了一个下午。后来不得不把所有的子函数拆掉,直接堆在了主函数里面,然后立竿见影,几分钟搞定。不少人遇到这个问题,后来曹老师出马,花了一个中午终于找出问题了。

      问题在于在Makefile文件中,在生成目标文件的时候,把汇编代码的.O 文件 放在了C部分的.O文件之前,结果导致了链接时出现了错误。解决办法有两个:

      1、最简单的当然就是把两个文件位置对调      led.bin: serial.o   serials.o

      2、第一种方法显然治标不治本,比较专业的做法是写一个连接器脚本,连接器脚本代码如下:

      SECTIONS

    {
            . = 0x20000000;
     .text : {
            serials.o  //把 汇编代码的.o 文件先链接
            * (.text)
         }

    .bss : {
            * (.bss)
         }

    .data : {
            * (.data)
        }
    }

    /*************************************************************************************************************************************/

    /*设置LED灯*/
    #define GPJ2CON (*(volatile unsigned int*)0xE0200280)
    #define GPJ2PUD (*(volatile unsigned int*)0xE0200288)
    #define GPJ2DAT (*(volatile unsigned int*)0xE0200284)

    /*配置COM3口*/
    #define GPA1CON (*(volatile unsigned int*)0xE0200020)

    /*配置ULCON3和UCON3*/
    #define ULCON3 (*(volatile unsigned int*)0xE2900C00)
    #define UCON3 (*(volatile unsigned int*)0xE2900C04)

    /*用来使能FIFO*/
    #define UFCON3 (*(volatile unsigned int*)0xE2900C08)

    /*设置波特率*/
    #define UBRDIV3 (*(volatile unsigned int*)0xE2900C28)
    #define UDIVSLOT3 (*(volatile unsigned int*)0xE2900C2C)

    //设置状态寄存器
    #define UTRSTAT3 (*(volatile unsigned int*)0xE2900C10)

    //设置发送接收寄存器
    #define UTXH3 (*(volatile unsigned int*)0xE2900C20)
    #define URXH3 (*(volatile unsigned int*)0xE2900C24)

    首先是串口的初始化,使用的UART0

    void init_serial(void)
    {
          //设置GPIO为串口模式
          GPA1CON &= 0x00ff;
          GPA1CON |= 0x2200;

         //设置数据格式和相关配置
         ULCON3 = 0x3;
         UCON3 = 0x5;
         UFCON3 = 0x1;

         //设置波特率
         UBRDIV3 = 35;
         UDIVSLOT3 = 0x1;
    }

    void main(void)
    {
    //设置LED灯为上拉熄灭模式
    GPJ2CON &=0xFFFF0000;
    GPJ2CON |=0x1111;

    GPJ2PUD &=0xFFFFFF00;
    GPJ2PUD |=0xAA;

    GPJ2DAT=0xf;
    init_serial();

    //GPJ2DAT=0x0;
    /*
    //设置GPIO为串口模式
    GPA1CON &= 0x00ff;
    GPA1CON |= 0x2200;

    //设置数据格式和相关配置
    ULCON3 = 0x3;
    UCON3 = 0x5;
    UFCON3 = 0x1;

    //设置波特率
    UBRDIV3 = 35;
    UDIVSLOT3 = 0x1;
    */
    //init_serial();
    //delay(void);

    char temp ;

    while(1)
    {
    //put_c(temp);


    while( (UTRSTAT3 & 0x1)==0 );

    temp = URXH3;

    UTXH3 = temp;

    if(temp == '1')
    {
          GPJ2DAT = GPJ2DAT ^1;
    }

    if(temp == '2')
    {
          GPJ2DAT = GPJ2DAT ^2;
    }

    if(temp == '3')
    {
          GPJ2DAT = GPJ2DAT ^4;
    }

    if(temp == '4')
    {
         GPJ2DAT = GPJ2DAT ^8;
    }
    }
    }

     

     

  • 相关阅读:
    web框架学习
    css上
    数据库
    线程
    反射以及部分内置方法
    排序函数sort() 和sorted() 之介绍
    类的绑定方法
    继承
    面向对象和类
    混淆矩阵、准确率、召回率
  • 原文地址:https://www.cnblogs.com/ygy1784717631/p/4822959.html
Copyright © 2011-2022 走看看