搜索
bottom↓
回复: 4
打印 上一主题 下一主题

发个msp430的IO口模拟SPI

[复制链接]

出0入0汤圆

跳转到指定楼层
1
发表于 2011-8-17 17:31:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
unsigned char SPI_Read(void)
{
        unsigned char i,temp=0;
        RF4432_SCLK_0;
        delay_nus(1);
for(i=0;i<8;i++)
{
   temp<<=1;
   RF4432_SCLK_1;
   delay_nus(1);
   if (RF4432_SDO)        //读取最高位,保存至最末尾,通过左移位完成整个字节
   temp |= 0x01;
   RF4432_SCLK_0;
   delay_nus(1);
}
   RF4432_SCLK_0;
delay_nus(1);
return temp;
}
void SPI_Write(unsigned char txdata)
{
        unsigned char i;
       RF4432_SCLK_0;
       delay_nus(1);
      for(i=0;i<8;i++)
      {
        RF4432_SCLK_0;
        if(0x80&txdata)
        RF4432_SDI_1;
        else RF4432_SDI_0;
       delay_nus(1);
       RF4432_SCLK_1;
        delay_nus(1);
       txdata<<=1;
      }
    RF4432_SCLK_0;
    delay_nus(1);

}
//********************************************************************************//
//* 函数名:                                                   RF4432_WriteReg( )                                            //
//* 函数功能:                   RF4432寄存器写入函数                             //
//********************************************************************************//
void  SpiWriteRegister(unsigned char  addr, unsigned char value)
{
        RF4432_SEL_0;
        delay_nus(1);                 
        SPI_Write(addr|0x80); //地址最高位置1     
        SPI_Write(value);         
        RF4432_SEL_1;  
        delay_nus(1);               
}
//********************************************************************************//
//* 函数名:                                         RF4432_ReadReg(unsigned char  addr)                                  //
//* 函数功能:               RF4432寄存器读取函数                                 //
//********************************************************************************//
unsigned char  SpiReadRegister(unsigned char  addr)
{
        unsigned char value;
        RF4432_SEL_0;
         delay_nus(1);                  
        SPI_Write(addr|0x7f);//地址最高位置0      
        value = SPI_Read();         
        RF4432_SEL_1;
        delay_nus(1);         
        return value;
}

spi.h文件中需定义:
#define IO_SPI_DIR    P2DIR |=BIT0+BIT1+BIT3+BIT4  //p2的0,1,3,4管脚为输出,其余为输入
#define RF_SDN_1      P2OUT |=BIT0   //p2_0口为输出模式,做为RF_SDN的控制
#define RF_SDN_0      P2OUT &=~BIT0
#define RF4432_SDI_1  P2OUT |=BIT1   //p2_1口为SPI数据输入
#define RF4432_SDI_0  P2OUT &=~BIT1
#define RF4432_SEL_1  P2OUT |=BIT4  //p2_4口为SPI片选
#define RF4432_SEL_0  P2OUT &=~BIT4
#define RF4432_SCLK_1 P2OUT |=BIT3  //p2_3口为SPI时钟输出
#define RF4432_SCLK_0 P2OUT &=~BIT3
#define RF4432_SDO    (P2IN &BIT2) //p2_2口为SPI数据输出
#define RF4432_IRQ    (P2IN &BIT5)  //p2_5口为SI4432工作状态指示端口

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

2
发表于 2011-9-9 21:46:44 | 只看该作者
f149自带 还不怎么会用...... 只会模拟 汗

出0入0汤圆

3
发表于 2011-9-13 16:56:16 | 只看该作者
有没有用430的USART的SPI模式驱动SD卡的程序?

出0入0汤圆

4
发表于 2011-9-13 17:30:35 | 只看该作者
求教楼主个问题,在用430内置USART模块的SPI模式初始化SD卡的时候,SD卡的时序要求初始化要48个byte,而430单片机的发送缓存一次只能发8个byte,这个怎么整?

出0入0汤圆

5
发表于 2011-9-15 14:59:11 | 只看该作者
楼主还没现身呢...
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-19 00:26

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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