智能车制作

标题: DG128的SPI模块问题 [打印本页]

作者: 很高很瘦    时间: 2011-10-22 19:50
标题: DG128的SPI模块问题
大家好,其实SPI也就才几寄存器,但是我写了不知道怎么来检测它是否好使,程序写好了,有主程序里一直调用SPI_Init();   但是CLK引脚上一直不出波形,不知道是为什么,请大家看看,也许可以解决我的这个困惑。
  1. #include <hidef.h>      /* common defines and macros */
  2. #include <mc9s12dg128.h>     /* derivative information */
  3. #pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

  4. //-----------------------------------------------------
  5. //延时1毫秒
  6. void Dly_ms(int ms)
  7. {
  8.    int ii,jj;
  9.    if (ms<1) ms=1;
  10.    for(ii=ms;ii>0;ii--)
  11.      for(jj=0;jj<2670;jj++);    //busclk:16MHz--1ms
  12. }
  13. //-----------------------------------------------------   
  14. //SPI写一个字节
  15. void SPI_Write_Byte(unsigned char val)
  16. {
  17.         SPI0DR = val;
  18.         while(!(SPI0SR_SPIF));
  19.         return;
  20. }
  21. //-----------------------------------------------------
  22. //SPI读一个字节
  23. unsigned char SPI_Read_Byte(void)
  24. {        
  25.         while(!(SPI0SR_SPIF));
  26.         return SPI0DR;
  27. }
  28. //-----------------------------------------------------
  29. //SPI初始化,速率400kbps
  30. void SPI_Init(void)
  31. {
  32.   DDRT = 0xff;
  33.   MODRR   = 0x00;  
  34.   SPI0CR2 = 0x10;
  35.   SPI0CR1 = 0x4e;   
  36.   SPI0BR  = 0x42; //BR=busclk/((SPPR + 1)· 2^(SPR + 1))=16000/(5*8)=400k                 
  37. }
  38. //-----------------------------------------------------
  39. //总线频率为16M
  40. void setbusclock(void)
  41. {   
  42.     CLKSEL=0X00;                                          //disengage PLL to system
  43.     PLLCTL_PLLON=1;                                  //turn on PLL
  44.     SYNR=1;                                                                               
  45.     REFDV=1;                                  //pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
  46.     _asm(nop);                    //If PLL is selected (PLLSEL=1), Bus Clock = PLLCLK / 2=16M     
  47.     while(!(CRGFLG_LOCK==1))
  48.       _asm(nop);                        //when pll is steady ,then use it;
  49.     CLKSEL_PLLSEL =1;                          //engage PLL to system;
  50. }
  51. //======================================================
  52. void main(void) {
  53.   unsigned char spich=0;
  54.   EnableInterrupts;
  55.   
  56.   setbusclock();  

  57.   for(;;)
  58.   {
  59.   SPI_Init();
  60.   
  61.   }
复制代码

作者: 很高很瘦    时间: 2011-10-22 20:28
经过自己的测试已经可以了,一个比较小的问题,在主程序中永远向外面发SPI_Send_Byte();就可以看到时钟信号了,希望对大家有用、
作者: 靠岸    时间: 2011-10-22 20:55
为啥现在还在用DG128.。。
作者: 很高很瘦    时间: 2011-10-23 11:56
回复 3# 靠岸


    DG很弱吗?
作者: 靠岸    时间: 2011-10-25 15:05
回复 4# 很高很瘦


    dg强于xs
作者: guoshunkai521    时间: 2012-2-20 12:54
新手来看看

作者: excellentlizhen    时间: 2012-3-8 17:31

作者: 破浪激流    时间: 2012-8-1 19:34
问一下 SPI初始化中
DDRT = 0xff;

  MODRR   = 0x00;起什么作用?




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