UART_Test.c
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:2k
源码类别:

DSP编程

开发平台:

C/C++

  1. #define UARTA_BASE_ADDR 0x90080000
  2. #define ORDER 1
  3. #define RBR *((unsigned char *)(UARTA_BASE_ADDR+0*ORDER))
  4. #define THR *((unsigned char *)(UARTA_BASE_ADDR+0*ORDER))
  5. #define IER *((unsigned char *)(UARTA_BASE_ADDR+1*ORDER))
  6. #define IIR *((unsigned char *)(UARTA_BASE_ADDR+2*ORDER))
  7. #define FCR *((unsigned char *)(UARTA_BASE_ADDR+2*ORDER))
  8. #define LCR *((unsigned char *)(UARTA_BASE_ADDR+3*ORDER))
  9. #define MCR *((unsigned char *)(UARTA_BASE_ADDR+4*ORDER))
  10. #define LSR *((unsigned char *)(UARTA_BASE_ADDR+5*ORDER))
  11. #define MSR *((unsigned char *)(UARTA_BASE_ADDR+6*ORDER))
  12. #define SCR *((unsigned char *)(UARTA_BASE_ADDR+7*ORDER))
  13. #define DLL *((unsigned char *)(UARTA_BASE_ADDR+0*ORDER))
  14. #define DLM *((unsigned char *)(UARTA_BASE_ADDR+1*ORDER))
  15. void wait(int nWait);
  16. char cString[17]={ "Hello PC!,Over|" },cReceive,cBuffer[17],cAnswer[16]={"Oh,you say"};
  17. int bReceive,nLen;
  18. main()
  19. {
  20.    
  21.     unsigned int uWork;
  22. int i,k;
  23.     LCR = 0x80; 
  24.     DLL =10;    
  25. DLM = 0x00;  
  26.     LCR = 0x03;    
  27.     FCR = 0x57;
  28.     IER = 0x00;   /*8 bit data 115200 bps 1 bit stop 1 bit start */   
  29.     bReceive=0;
  30. /*    for(;;)
  31.     {  
  32.      while(LSRA & 0x40 == 0);
  33.     
  34.      THRA=;
  35.     }        
  36.   */
  37.   while ( 1 )
  38. {
  39. if ( bReceive==0 )
  40. {
  41. for ( i=0;i<16;i++ )
  42. {
  43. do
  44. uWork=LSR;
  45. } while ( uWork&0x040 != 0x040 );
  46. THR=cString[i];
  47. wait(1024);
  48. }
  49. }
  50. else
  51. {
  52. for ( i=0;i<10;i++ )
  53. {
  54. do
  55. uWork=LSR;
  56. } while ( uWork&0x040 != 0x040 );
  57. THR=cAnswer[i];
  58. wait(1024);
  59. }
  60. do
  61. uWork=LSR;
  62. } while ( uWork&0x040 != 0x040 );
  63. THR='"';
  64. for ( i=0;i<nLen;i++ )
  65. {
  66. do
  67. uWork=LSR;
  68. } while ( uWork&0x040 != 0x040 );
  69. THR=cBuffer[i];
  70. wait(1024);
  71. }
  72. do
  73. uWork=LSR;
  74. } while ( uWork&0x040 != 0x040 );
  75. THR='"';
  76. wait(1024);
  77. for ( i=9;i<16;i++ )
  78. {
  79. do
  80. uWork=LSR;
  81. } while ( uWork&0x040 != 0x040 );
  82. THR=cString[i];
  83. wait(1024);
  84. }
  85. }
  86. k=0; bReceive=0;
  87. while ( 1 )
  88. {
  89. do
  90. {
  91. uWork=LSR;
  92. } while ( (uWork&1)==0 );
  93. cReceive=RBR;
  94. cBuffer[k]=cReceive&0x0ff; 
  95. if ( cReceive=='.' )
  96. {
  97. cBuffer[k+1]='';
  98. nLen=k+1;
  99. bReceive=1;
  100. break;
  101. }
  102. k++; k%=16;
  103. }
  104. }
  105.   
  106. void wait(int nWait)
  107. {
  108. int i,j,k=0;
  109. for ( i=0;i<nWait;i++ )
  110. for ( j=0;j<64;j++ )
  111. k++;
  112. }