天嵌 ARM开发社区

 找回密码
 注册
查看: 3418|回复: 3

TQ2440裸机串口问题,请大神帮忙

[复制链接]
spkk 发表于 2013-3-28 18:40:35 | 显示全部楼层 |阅读模式
本帖最后由 spkk 于 2013-4-10 16:00 编辑

老师给布置的任务,要求是norflash上一句代码都不能有,从启动开始写起,实现串口收到一个数据后再发回一个数据,现在问题是收到的和发送的都是乱码,不知道是启动时初始化有问题还是怎么,AXD+jlink调试时发现0x50000020和0x50000024处的数据都没有对,代码如下,希望大神能帮我分析下大概是怎么回事。。。boot.s:启动初始化的代码
  1. ;***************work mode defines***********************
  2. USERMODE        EQU        0x10
  3. FIQMODE                EQU        0x11
  4. IRQMODE                EQU        0x12
  5. SVCMODE                EQU        0x13
  6. ABORTMODE        EQU        0x17
  7. UNDEFMODE        EQU        0x1b
  8. SYSMODE                EQU        0x1f
  9. ;**************work mode defines end********************
  10. ;**************INTs defines*****************************
  11. NOINT                EQU        0xc0
  12. SUBINTDIS        EQU        0x4A00001C
  13. IRQDIS                EQU        0x80
  14. FIQDIS                EQU        0x40
  15. ;*************INTs defines end**************************
  16. ;*******************hardware defines********************
  17. WTCON                EQU        0x53000000
  18. LOCKTIME        EQU        0x4C000000
  19. CLKDIV                EQU        0x4C000014
  20. UPLLCON                EQU        0x4C000008
  21. MPLLCON                EQU        0x4C000004

  22. M_MDIV                EQU        92
  23. M_PDIV                EQU        1
  24. M_SDIV                EQU        1        
  25. U_PDIV                EQU        2        
  26. U_MDIV                EQU        56
  27. U_SDIV                EQU        2
  28. ;******************hardware defines end*****************
  29. ;------------------Stack Addr Define--------------------
  30. _STACKBASEADDR        EQU        0x33ff8000
  31. StackUse EQU (_STACKBASEADDR-0x3800)
  32. StackSvc        EQU        (_STACKBASEADDR-0x2800)
  33. StackUnd        EQU        (_STACKBASEADDR-0x2400)
  34. StackAbt        EQU        (_STACKBASEADDR-0x2000)
  35. StackIRQ        EQU        (_STACKBASEADDR-0x1000)
  36. StackFIQ        EQU        (_STACKBASEADDR-0x0000)
  37. ;-------------Stack Addr Define Ends--------------------
  38. IMPORT IRQHandle
  39.                                          ;this is used by asm
  40. IMPORT        FIQ_Exception        ;the FIQ process func,used by asm
  41. IMPORT Main
  42. EXPORT HandlerSWI        ;this is used by c
  43. GET inc/memdef.inc
  44. CODE32
  45. AREA Boot,CODE,READONLY
  46. ENTRY
  47. Vectors
  48. B        ResetInit        ;reset int.
  49. B        HandlerUndef        ;the undefined int
  50.         B        HandlerSWI        ;software int
  51. B        HandlerPabort        ;int for get command error,use for MMU
  52.         B        HandlerDabort        ;int for get data error,use for MMU
  53.         NOP                ;reserved
  54.         ;B        HandlerIRQ        ;int
  55.         B        IRQHandle
  56.         B        HandlerFIQ        ;fast int

复制代码
main.c 串口初始化以及发送接收
  1. //***************GPIO Defines******************
  2. #define        GPBCON                (*(volatile        unsigned long*)0x56000010)
  3. #define        GPBIOCON        0x00015400
  4. #define        GPBDAT                (*(volatile        unsigned long*)0x56000014)        

  5. #define rGPHCON    (*(volatile unsigned long*)0x56000070)        //Port H control
  6. #define rGPHDAT    (*(volatile unsigned long*)0x56000074)        //Port H data
  7. #define rGPHUP     (*(volatile unsigned long*)0x56000078)        //Pull-up control H

  8. //****************GPIO Defines Ends***********

  9. //**************UART Defines*****************
  10. //uart line control
  11. #define        ULCON0        (*(volatile unsigned *)0x50000000)
  12. //uart control
  13. #define UCON0        (*(volatile unsigned *)0x50000004)
  14. //uart baud rate divisor
  15. #define        UBRDIV0        (*(volatile unsigned *)0x50000028)
  16. //uart fifo control
  17. #define        UFCON0        (*(volatile        unsigned *)0x50000008)
  18. //uart modem control
  19. #define UMCON0        (*(volatile unsigned *)0x5000000C)
  20. //uart TX/RX status control
  21. #define UTRSTAT0        (*(volatile unsigned *)0x50000010)
  22. //uart error status control
  23. #define UERSTAT0                (*(volatile unsigned *)0x50000014)
  24. //uart FIFO status
  25. #define        UFSRAT0                (*(volatile unsigned *)0x50000018)
  26. //uart modem status
  27. #define        UMSTAT0                (*(volatile unsigned *)0x5000001C)
  28. //uart transmit buffer reg.little endian
  29. #define        UTXH0        (*(volatile unsigned char*)0x50000020)
  30. //uart receive buffer reg.little endian
  31. #define URXH0        (*(volatile unsigned char*)0x50000024)
  32. //TXD0 Ready,means can sent a char out
  33. //#define TXD0READY        (1<<2)
  34. #define TXD0READY        0x2
  35. //RXD0 Ready means can receive a char
  36. //#define        RXD0READY        (1)
  37. #define        RXD0READY        0x1

  38. //************UART Defines End***************

  39. unsigned int PCLK;        
  40. int fireLED(int led);
  41. int killAllLED(void);
  42. void delay(int ms);
  43. void uartInit(void);
  44. void uartPutchar(unsigned char c);
  45. unsigned char uartGetchar(void);
  46. void Main(void){
  47.         //GPBCON = 0x00001000;//2 digit a bit,the led is from gpb5 to gpb8
  48.         //GPBDAT = 0x00000000;
  49.         unsigned char tmp = 0;
  50.         int foo,bar;
  51.         fireLED(4);
  52.         tmp = 'b';
  53.         uartInit();
  54.         uartPutchar(tmp);
  55.         
  56.         while(1){
  57.         
  58.                 tmp = uartGetchar();
  59.                 for(foo = 0;foo<1000;foo++)
  60.                 {
  61.                         for(bar = 0;bar<1000;bar++);
  62.                 }
  63.                 if(/*(int)tmp>0*/1){
  64.                         unsigned char forDebug = tmp;
  65.                         uartPutchar(forDebug);
  66.                 }
  67.         }
  68.         return;

  69. }
  70. int fireLED(int led){
  71.         
  72.         int foo;
  73.         unsigned long tmp = 0x100;
  74.         for(foo = led;foo > 0;foo--){
  75.                 tmp*=4;
  76.         }
  77.         GPBCON = tmp;
  78.         GPBDAT = 0x00000000;
  79.         return 1;
  80. }
  81. int killAllLED(){
  82.         GPBDAT = 0xFFF;
  83.         return 0;
  84. }
  85. void uartInit(void){
  86.         int pclk = 50000000;//50MHz
  87.         int buat = 115200;
  88.         //BAUD RATE equation:
  89.         //UBRDIV0 = (int)(pclk/(buat*16))-1;
  90.         //see chapter 11 in datashit
  91.         rGPHCON        |= 0xa0;//GPH2,GPH3 set to TXD0 and RXD0
  92.                                         //10100000b=0xa0
  93.                                         //see the chapter9 in datashit
  94.         rGPHUP =        0x0;/* 0x0c;*/ //enable pull up reg
  95.         
  96.         ULCON0 = 0x03;        //8bit
  97.         //UCON0 = 0x05;
  98.          //when the TX is empty or the FIFO stacks is reach the deep the call the INT
  99.         UFCON0 = 0x0;        //disable FIFO
  100.         UMCON0 = 0x0;        
  101.         UBRDIV0 = (int)((pclk/(buat*16))-1);//set the BAUD RATE
  102.         //UTRSTAT0 = 0x0;
  103.         URXH0 =0;
  104.     UTXH0 =0;
  105. }

  106. void uartPutchar(unsigned char c){
  107.         while(!(UTRSTAT0&TXD0READY));//wait the buffer empty
  108.         //killAllLED();
  109.         fireLED(1);
  110.         UTXH0 = c;        
  111. }
  112. unsigned char uartGetchar(void){
  113.         while(!(UTRSTAT0&RXD0READY));//wait the buffer is full
  114.         fireLED(3);
  115.         return URXH0;
  116. }
复制代码


亚瑟王 发表于 2013-3-29 17:56:32 | 显示全部楼层
亲,烧写TQ2440_Test然后看串口部分初始化对不对?
 楼主| spkk 发表于 2013-3-30 14:22:44 | 显示全部楼层
亚瑟王 发表于 2013-3-29 17:56
亲,烧写TQ2440_Test然后看串口部分初始化对不对?

谢谢版主!昨天上午就解决了,是锁相环的问题,MPLL频率没有配置正确,导致串口的波特率没对,所以发送接受都是乱码。。。。。
亚瑟王 发表于 2013-4-1 10:49:38 | 显示全部楼层
spkk 发表于 2013-3-30 14:22
谢谢版主!昨天上午就解决了,是锁相环的问题,MPLL频率没有配置正确,导致串口的波特率没对,所以发送接 ...

亲,问题解决了,请把帖子类型改为“已解决”。(方法请参考:http://www.armbbs.net/forum.php?mod=viewthread&tid=15200)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

i.MX8系列ARM cortex A53 M4 工控板上一条 /1 下一条

Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )

GMT+8, 2024-4-29 19:06 , Processed in 1.078132 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表