查看: 2554|回复: 1

[求助] 请教一下KL25的SPI的一个奇怪问题

[复制链接]

该用户从未签到

2

主题

21

帖子

0

注册会员

Rank: 2

积分
55
最后登录
1970-1-1
发表于 2013-8-29 11:55:22 | 显示全部楼层 |阅读模式
 void SPI_Init(void)
{
        unsigned char tmp;
        SIM_SCGC4 |= SIM_SCGC4_SPI0_MASK;                    //Enable SPI0 Clock gate 
 
        /* 关闭SPI进行配置 */
        SPI0_C1 &= ~SPI_C1_SPE_MASK;
        /* SPI引脚配置 */
        // PORTC_PCR4 &= ~PORT_PCR_MUX_MASK;
        // PORTC_PCR4 |= PORT_PCR_MUX(2)|PORT_PCR_DSE;  //Use PTD0 as SPI0_SS_b
        PORTC_PCR7 &= ~PORT_PCR_MUX_MASK;
        PORTC_PCR7 |= PORT_PCR_MUX(2);  //Use PTD3 as SPI0_MISO 
        PORTC_PCR6 &= ~PORT_PCR_MUX_MASK;
        PORTC_PCR6 |= PORT_PCR_MUX(2);  //Use PTD2 as SPI0_MOSI
        PORTC_PCR5 &= ~PORT_PCR_MUX_MASK;
        PORTC_PCR5 |= PORT_PCR_MUX(2);   //Use PTD1 as SPI0_SCK
        /* 设为主机模式 */
        SPI0_C1 |= SPI_C1_MSTR_MASK;
        /* 设置默认时钟速度 */ //24MHz bus clock,div = (SPPR+1)*2^(SPR+1)
        SPI0_BR =  0x07;//此处时钟 5us,div = 768 SPPR = 0, SPR = 6
        /* 开启SPI */
        SPI0_C1 |= SPI_C1_SPE_MASK;
        tmp = SPI0_D; //清SPI_S
}
 
unsigned char SPI_transfer(unsigned char dat)
{
  SPI0_D = _data;
  while (!(SPI0_S & SPI_S_SPTEF_MASK)) //等待发送结束 
    ;
  return SPI0_D;
}
 
void main()
{
        unsigned char i;
        SPI_Init();
        for(i=0;i
我知道答案 目前已有0人回答
回复

使用道具 举报

该用户从未签到

2

主题

21

帖子

0

注册会员

Rank: 2

积分
55
最后登录
1970-1-1
 楼主| 发表于 2013-8-29 12:11:10 | 显示全部楼层

RE:请教一下KL25的SPI的一个奇怪问题

又经过几次测试,发现只调用一次SPI_transfer(0xff),不过等待多久,SPI_S中的SPRF都为0,即SPI_D中无数据。不过如果调用两次或两次以上,就会出现上述问题,SPI_D会多出一个数据。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-20 15:09 , Processed in 0.085926 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

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