签到

06月21日
尚未签到

共有回帖数 0

    晚街听风

    等级:
    *          C/C++资讯站        www.ccbeta.net    
    *          Authour: flyreally    
    *    
    *电子设计大赛一道题目要求必须使用NEC的电机驱动芯片,    
    *芯片跟单片机通过UART或者SPI通信,所以写了这个程序    
    *    
    *在网上找了点SPI的程序,发现其中可能有些错误,反正    
    *和我的最终程序不一样,我是严格按照DATASHEET写的,通信成功    
    */    
       
    #include hidef.h      /* common defines and macros */    
    #include MC9S12XS128.h     /* derivative information */    
    #pragma LINK_INFO DERIVATIVE "mc9s12xs128"    
       
    //SPI写一个字节    
    void SPI_Write_Byte(ulong val)    
    {    
         unsigned int a;    
       
         while (!(SPI0SR_SPTEF));    //等待数据寄存器清空    
         SPI0DR = val;               //将数值写入寄存器    
         a = SPI0DRL;        //对SPI0DRL进行一次读操作以清除标志位    
         while(SPI0SR_SPIF);         //确定清除标志位    
    }    
       
    //SPI读一个字节      
    ulong SPI_Read_Byte(void)    
    {        
       while(!(SPI0SR_SPIF));    
       return SPI0DR;    
    }    
       
       
    //SPI初始化,速率50kbps      
    void SPI_Init(void)      
    {    
       MODRR   = 0x00;    
       SPI0CR1 = 0x50;        //CPOL,CPHA一致,同为零    
       /*必须注意这,时序在SPI通信中很重要,M端和S端的时序一定要一样,  否则不能通信,具体的时序由硬件决定*/    
       SPI0CR2 = 0x48;        //16位传输,MOFEN置零    
       //BR=busclk/((SPPR + 1)· 2^(SPR + 1))=16000/(5*8)=50k    
       SPI0BR  = 0x47;                      
    }    

    楼主 2016-04-21 09:22 回复

共有回帖数 0
  • 回 帖
  • 表情 图片 视频
  • 发表

登录直线网账号

Copyright © 2010~2015 直线网 版权所有,All Rights Reserved.沪ICP备10039589号 意见反馈 | 关于直线 | 版权声明 | 会员须知