智能车制作

标题: mc9s12的sci部分 [打印本页]

作者: cdcc0606    时间: 2014-1-21 15:49
标题: mc9s12的sci部分
我刚开始写sci部分是用的mc9s12dg128。写完过后可以发送数据,但是不能接收数据。请问是为什么,我把代码贴出来吧。我发现里边rdrf一旦进入中断后就自动变为0,而且不管我怎么赋值,也不能改变sci0sr1_rdrf的值,请问谁知道是为什么呢?
  1. #include <hidef.h>      /* common defines and macros */
  2. #include "headers/uart.h"
  3. void main(void) {
  4.   UART_s8Init(Duart0, 9600);
  5.   
  6.         EnableInterrupts;

  7.   UART_s8SendByte( Duart0, 2 );
  8.    
  9.   for(;;) {
  10.   
  11.     _FEED_COP(); /* feeds the dog */
  12.    
  13.   } /* loop forever */
  14.   /* please make sure that you never leave main */
  15. }
复制代码
  1. #include "headers\uart.h"
  2. #include <mc9s12dg128.h>
  3. #pragma LINK_INFO DERIVATIVE "mc9s12dg128"

  4. #if (Duart_UART0_used)
  5. volatile static U8 u8Uart0_RxBuffer[Duart_BUFFER_SIZE_RX];
  6. volatile static U8 u8Uart0_RxB_indexin=0;
  7. volatile static U8 u8Uart0_RxB_indexout=0;
  8. volatile static U8 u8Rx_0_Error=0;
  9. #endif

  10. S8 UART_s8Init( U8 UART_Id, U32 baudrate)
  11. {
  12.         U16 ubrr_value=0;
  13. #if F_UART==8000000
  14.          switch( baudrate )
  15.          { case   2400 : ubrr_value =   207; break;
  16.            case   4800 : ubrr_value = 103; break;
  17.            case   9600 : ubrr_value =  52; break;
  18.            case  14400 : ubrr_value =  34; break;
  19.            case  19200 : ubrr_value =  25; break;
  20.            case  28800 : ubrr_value =  16; break;
  21.            case  38400 : ubrr_value =  12; break;
  22.            case  57600 : ubrr_value =   8; break;
  23.            case  76800 : ubrr_value =   6; break;
  24.            case 115200 : ubrr_value =   3; break;
  25.            case 230400 : ubrr_value =   1; break;
  26.            case 250000 : ubrr_value =   1; break;
  27.            case 500000 : ubrr_value =   0; break;
  28.            default     : return( -1 );
  29.          }
  30.         #else
  31.                 #error "F_UART non reconnu ou non defini !"
  32.   #endif
  33.                
  34. #if (Duart_UART0_used)
  35.                 if(UART_Id==Duart0)
  36.                 {
  37.                   SCI0BDH=(ubrr_value>>8) & 0xFF;
  38.       SCI0BDL=ubrr_value& 0xFF;   
  39.       SCI0CR1=0x00; // SCICR1: LOOPS=0,SCISWAI=0,RSRC=0,M=0,WAKE=0,ILT=0,PE=0,PT=0
  40.       SCI0CR2=0x2C;         // enable tx et rx interrupts
  41.                 }
  42. #endif
  43.         return(0);
  44. }

  45. S8 UART_s8GetByte( U8 UART_Id )
  46. {
  47. #if (Duart_UART0_used)
  48.      if(UART_Id==Duart0)
  49.      {
  50.         if(u8Rx_0_Error==1)
  51.        {
  52.         u8Rx_0_Error=0;
  53.         return(-1); // Err Rx
  54.         }else
  55.        {
  56.         while(SCI1SR1_RDRF==0) ; //=while(!SCI1SR1_RDRF); waite until le data arrive , rdrf!=1
  57.         SCI1SR1_RDRF=1;
  58.         return SCI1DRL;
  59.         }
  60.     }
  61. #endif
  62. }
复制代码



作者: cdcc0606    时间: 2014-1-21 18:25
没有人回复吗,自己顶一下,任何可能的想法都好,我真的卡了很久了
作者: cdcc0606    时间: 2014-1-22 15:01
大家都没有任何想法吗
作者: cdcc0606    时间: 2014-1-22 17:11
好吧,我已经搞定了……




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2