打印
[M051]

我的MO516 SPI1没有反应

[复制链接]
2666|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liyiui|  楼主 | 2011-11-9 14:12 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
spi, tc, CSR, TI, se
本帖最后由 缥缈九哥 于 2012-9-14 12:19 编辑

今天用MO516 IO口模拟SPI 向74HC595 发送数据,正常.   然后用SPI1     向74HC595 发送数据 没有反应,请大侠们帮我看下是那出了问题了?
只用了  SPI1MOSI,  SPI1CLK,  RCK是用IO口模拟的,

void SPI1_Init()

{
P0_MFP &= ~(P05_AD5_SPI1MOSI |P07_AD7_SPI1CLK) ;  
P0_MFP |= (SPI1MOSI | SPI1CLK) ;   
APBCLK|= SPI1_CLKEN;
SPI1_SSR&= ~LVL_H;
SPI1_CNTRL &= ~LSB_FIRST;
SPI1_CNTRL &= ~CLKP_IDLE_H;
SPI1_CNTRL |= TX_NEG_F;
SPI1_CNTRL &= ~RX_NEG_F;
CLKDIV &= 0xFFFFFFF0;
SPI1_DIVIDER &= 0xFFFF0000;
SPI1_DIVIDER |= 3;SPI_VARCLK =0
SPI1_CNTRL&= ~SPI_MODE_SLAVE;
SPI1_SSR&= ~ASS_AUTO;

}


void SPI1_Send_1W(uint8_t ulData)
{
SPI1_CNTRL &= TX_NUM_ONE;
SPI1_CNTRL|= LEN_8BIT;
SPI1_TX0 = ulData;
SPI1_CNTRL|= GO_BUSY;
}

void TMR0_Delay1ms(uint32_t ulCNT)
{TCMPR0= 12000;
TCSR0|= CEN;
while (ulCNT --)
{while (!(TISR0&TMR_TIF))
TISR0 |= TMR_TIF;
}
TCSR0 &= ~CEN;
}
void Timer0_Init()
{APBCLK |= TMR0_CLKEN;
CLKSEL1 = ((CLKSEL1 & (~TM0_CLK)) | TM0_12M);
CLKSEL1=0;
TCSR0= 0x00000001;
TCSR0 &= ~TMR_MODE;
TCSR0 |=MODE_PERIOD;
TCSR0 |= TMR_IE;
TCSR0 |= CRST;
TCMPR0.CRST=1
}
main(void)
{
uint8_t  np,s;
Un_Lock_Reg();
PWRCON|= XTL12M_EN;
while(!(CLKSTATUS& XTL12M_STB));
CLKSEL0= (CLKSEL0 & (~HCLK)) | HCLK_12M;
Timer0_Init();

while(1)

{
    for(s=0;s<255;s++)
{
SPI1_Send_1W(s);
while((SPI1_CNTRL & GO_BUSY)!=0);
RCK=0;
np=10;
while(np--);
RCK=1;
np=10;
while(np--) ;
RCK=0;
np=10;
while(np--)
TMR0_Delay1ms(100);
}

}
}

01.jpg (63.5 KB )

01.jpg

相关下载

相关帖子

沙发
hotpower| | 2011-11-9 16:18 | 只看该作者
好像在牛卧堂看了,spi0和spi1为何混用?

使用特权

评论回复
板凳
hotpower| | 2011-11-9 16:27 | 只看该作者
还有假若是595级联,那么RCK可以最后输出二级缓存的,还有SPI有其中模式,595好像是模式3,我在新浪微群里有SPI的例程,那个是usb,spi及pdma。新唐的spi很给力,有pdma

使用特权

评论回复
地板
hotpower| | 2011-11-9 16:41 | 只看该作者
我所有的SPI程序都是“收发一体化”的,
因为SPI是同步串口,即时钟由主机提供,
所以在发送时必有输入。一般随意发送就会得到输入即读数据。故读写实际可以为一个函数的。

使用特权

评论回复
5
liyiui|  楼主 | 2011-11-10 10:16 | 只看该作者
谢谢:大叔!
       我只用了SIP1,没有用SI0.

使用特权

评论回复
6
hotpower| | 2011-11-10 11:32 | 只看该作者
你给的程序有错误呀!
用spi0发送,spi1查询标志。
你仔细看看。

使用特权

评论回复
7
liyiui|  楼主 | 2011-11-10 13:24 | 只看该作者
大叔: 我仔细看了,是SPI1 发送呀!真是奇怪了。

使用特权

评论回复
8
hotpower| | 2011-11-10 16:37 | 只看该作者
你改了!
我手机回帖不方便,晚上不加班可以好好给你讲SPI
新浪微群有俺调试通过的例程。
俺玩SPI,每次都要把四个模式做实验。
一般外设只能最多支持两种模式,一般为模式0或模式3。

使用特权

评论回复
9
liyiui|  楼主 | 2011-11-11 08:00 | 只看该作者
谢谢:大叔!我去看你的例程去

使用特权

评论回复
10
hotpower| | 2011-11-11 08:39 | 只看该作者
还没搞定?园地里有几个SPI的例程。注意新浪微群入群密码是250,自动加入。

使用特权

评论回复
11
hotpower| | 2011-11-11 09:14 | 只看该作者
感觉有些怪异,一般初始化后再不会折腾控制寄存器了,只控制和查询GO_BUSY即可

使用特权

评论回复
12
liyiui|  楼主 | 2011-11-11 13:54 | 只看该作者
谢谢:大叔!
我已经解决了,是我没有设置好寄存器.看来我还要加油

使用特权

评论回复
13
hotpower| | 2011-11-11 14:38 | 只看该作者
解决就好。看了俺的收发一体化函数了吗?那个例程是usb,spi,pdma。上位机用vc6,新唐的例程少文件,俺都补上了。没做界面很丑陋,不过实验目的达到了。还有如何解决也应该分享,哪怕是最低级的错误。不要脸红,因为最简单的最容易出错,最复杂的几乎不会出错。因为重视程度不同。新唐的SPI很暴力,非常好用。

使用特权

评论回复
14
liyiui|  楼主 | 2011-11-11 15:10 | 只看该作者
SPI1_Init();没有放在主函数中,真是晕了头.

使用特权

评论回复
15
hotpower| | 2011-11-11 17:01 | 只看该作者
哈哈,以后不会再出现此类问题了

使用特权

评论回复
16
liyiui|  楼主 | 2011-11-11 18:32 | 只看该作者
把问题想的太复杂了......

使用特权

评论回复
17
hotpower| | 2011-11-11 23:21 | 只看该作者
本帖最后由 hotpower 于 2011-11-11 23:44 编辑

才看出来,只有Timer0_Init();

是够晕的~~~

再有新唐的SPI有8种模式,而一般的为4种。
而且可以32位,比TI的少点(128位),不过还是不错的。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

26

主题

696

帖子

3

粉丝