智能车制作

标题: 懂飞思卡尔SPI的高手们帮帮我!!! [打印本页]

作者: gimmooncher    时间: 2010-3-12 15:46
标题: 懂飞思卡尔SPI的高手们帮帮我!!!
哪位高手能给我提供SPI通信好使的程序,就是俩个S12型单片机之间用SPI(不是模拟SPI)传输数据,我自己编了一个单片机发数据(比如0xf0)到另一个单片机,然后用八个LED显示,但是就是不行,负责发数据单片机的SS管脚我接了VDD,另一个接受数据的单片机的SS 接了GND。不适用中断,我用的单片机型号是MC9S12DP512, DG128也行,就是想看看大手编好使的程序跟我有什么不同,拜托,懂飞思卡尔SPI的高手们帮帮我!!!!!
作者: zdhly0401    时间: 2010-3-12 16:18
给你个例子在中电论坛上找到的,我以前也是调了老半天才把spi调通,主要在端口设置上没有注意
*功能:使用SPI实现对74HC595的控制操作,实现L1-L8流水灯控制.
;系统晶振6MHz,SPI波特率为5KHz
*创建时间:2008-5-15
********************************************************/
#include <hidef.h> /* common defines and macros */
#include <mc9s12dg128.h> /* derivative information */
#include"Delay.h" //Delay function
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"
uchar disp_tab[28]={0xFF,0,0xFF,0,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80,0x40,0x20,
0x10,0x08,0x04,0x02,0x01,0x00,0x18,0x24,0x42,0x81,0x42,0x24, 0x18,0x00};/*显示数据*/
void SpiInit(void); //SPI初始化
void SpiTx(uchar dat); //SPI发送数据函数
void main(void) {
uchar i;
/* put your own code here */
EnableInterrupts;
DDRB_BIT0=1; //PB0输出
DDRM|=0x38; //SCK0=1,MOSI=1,SS0=1
MODRR_MODRR4=1; //使用PM口
PTM|=0x08;
SpiInit(); //SPI初始化
PTM&=0xF7; //初始化小灯,全亮
SpiTx(0);
PTM|=0x08;
// Delay_6M_s(1);
for(;;)
{
for(i=0;i<28;i++)
{
Delay_6M_ms(400); //延时400ms
PTM&=0xF7;
SpiTx(disp_tab);
Delay_6M_us(100);
PTM|=0x08;
}
} /* wait forever */
/* please make sure that you never leave this function */
}
/**********************SPI初始化************************/
void SpiInit()
{
//设置波特率,波特率=BUSCLK/Diviser;Diviser=(SPPR+1)*2^(SPR+1)
SPI0BR|=0x00; //Diviser=5*2=10,6M晶振下速率为3K
//控制寄存器,配置数据传输格式以及主从机模式
//不使能中断,数据最高位先发送,在时钟上升沿时保持不变,下降沿更新
SPI0CR1|=0x5E; //SPE=1,MSTR=1,CPOL=1,CPHA=1,SSOE=1
// SPI0CR2|=0x10; //使能模式错误
}
/**********************发射端数据*************************/
void SpiTx(uchar dat)
{
uchar k;
uchar temp;
temp=SPI0SR; //清除状态标志位
while(!SPI0SR_SPTEF)
{
k++;
Delay1_6M(0);
if(k>=100)
{
PORTB_BIT0=1; //9S12开发板上小灯亮,报警
return;
}
}//等待输出为空
k=0;
SPI0DR=dat;
while(!SPI0SR_SPIF)
{
k++;
Delay1_6M(0);
if(k>=100)
{
PORTB_BIT0=1; //9S12开发板上小灯亮,报警
return;
}
};//等待发送结束
}
作者: ming076    时间: 2010-5-4 14:25
ding~
作者: 向往智能    时间: 2010-5-4 23:24
学习中
作者: zzfei90    时间: 2010-12-3 15:36
先回复再看贴
作者: spwbaha    时间: 2011-4-3 15:35
欣赏中
作者: dbb935623040    时间: 2011-4-4 12:18
律动
作者: weichuiweicao    时间: 2011-8-13 08:05
呵呵,额又回来了,学习中!
作者: wodesanmaoqian    时间: 2011-8-23 15:50
先回复,再看帖
作者: qaabq    时间: 2011-8-25 19:58
回帖
作者: beandy    时间: 2012-1-7 10:35
回复 1# gimmooncher    主片你可以不使用ss引脚  使用IO口作为从片的片选端。我感觉你的主片的ss引脚接的有问题。你可以用示波器看看主片几根输出信号线输出的波形对不对。
作者: 79270300    时间: 2012-6-13 22:03
hao
作者: leosaac    时间: 2012-6-16 21:36
我只调通了XS128和NRF24L01之间的SPI通信,没有试过两个XS128之间的通信。




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