查看: 2510|回复: 7

[S12] 9S12YH64单片机SPI通信的问题

[复制链接]

该用户从未签到

14

主题

777

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1234
最后登录
2015-9-13
发表于 2015-7-21 16:24:29 | 显示全部楼层 |阅读模式
单片机型号是:9S12YH64MLL,关于SPI通讯,我的程序如下:
//SPI初始化
void SPI_init(void) {
  PTSRR = 0x20; //配置PV口为SPI接口
  
  //主机,SCK、MOSI、SS配置为输出,MISO为输入
  DDRV_DDRV0 = 0;  //miso为输入
  DDRV |= DDRV_DDRV1_MASK|DDRV_DDRV2_MASK;  //mosi、sck为输出
  PTV |= PTV_PTV1_MASK|PTV_PTV2_MASK;
  
  DDRU |= DDRU_DDRU7_MASK|DDRU_DDRU7_MASK;  //ss为输出
  PTU_PTU7 = 0;

  SPICR1 = 0x5E;  //主机模式
  SPICR2 = 0x08; //SS管脚没有利用,8位数据
  SPIBR = 0x03;  //波特率500Kb/s                           
}

byte  spi_send(byte x) {
  while(!SPISR_SPTEF);
  SPIDRL=x;  
   return SPIDRL;   
}

byte  spi_receive (void) {  
   while(!SPISR_SPIF);  
   return SPIDRL;         
}
void main(void) {
byte n = 0,m = 0;
CPMU_PEE_8MHz();     // configure clock module
Configure_Ports();    // setup IO ports
Init_Timer1();      // init TIM1 as free-running
ensci();   // init SCI
SPI_init();         
EnableInterrupts;
for(;;) {
      n = spi_send(0x95);
      putchar(SPIDRL);
      putchar(n);
      Delay(5);
}
}

问题是:我调用SPI发送数据的函数以后,为什么数据没有被传递到SPI的数据寄存器SPIDRL中?(通过串口监控发现一直是0x00,正确的应该是0x95),这是什么原因呢?我的程序中有错误吗?我用示波器观察到,MOSI管脚上是有数据的,而且数据也正确,但是读数据寄存器怎么读不到数据呢?示波器波形如下:
IMG_20150721_162315.jpg
我知道答案 目前已有7人回答

评分

参与人数 1NXP金币 +5 收起 理由
小七 + 5 打赏!

查看全部评分

回复

使用道具 举报

该用户从未签到

9

主题

144

帖子

0

中级会员

Rank: 3Rank: 3

积分
286
最后登录
2020-5-14
发表于 2015-7-21 16:33:26 | 显示全部楼层
顶帖子是一种美德
回复 支持 反对

使用道具 举报

该用户从未签到

14

主题

777

帖子

0

金牌会员

Rank: 6Rank: 6

积分
1234
最后登录
2015-9-13
 楼主| 发表于 2015-7-22 09:04:34 | 显示全部楼层
自己也顶顶,期待大侠来解决~
回复 支持 反对

使用道具 举报

该用户从未签到

124

主题

3600

帖子

0

金牌会员

Rank: 6Rank: 6

积分
5781
最后登录
1970-1-1
发表于 2015-7-22 09:17:14 | 显示全部楼层
S12设置为master,正常发生完数据后,再读数据寄存器,其值为零,应该没问题吧。
回复 支持 反对

使用道具 举报

  • TA的每日心情
    慵懒
    2016-11-4 16:56
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    602

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1842
    最后登录
    2020-8-25
    发表于 2015-7-22 17:17:02 | 显示全部楼层
    过来学习的。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2022-3-3 09:56
  • 签到天数: 4 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    106

    主题

    836

    帖子

    4

    金牌会员

    Rank: 6Rank: 6

    积分
    1527
    最后登录
    2023-6-12
    发表于 2015-7-23 13:04:41 | 显示全部楼层
    串口监控?这个不好监控把,仿真了没
    233r ew.PNG
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14

    主题

    777

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1234
    最后登录
    2015-9-13
     楼主| 发表于 2015-7-24 16:50:32 | 显示全部楼层
    FSL_TICS_ZP 发表于 2015-7-22 09:17
    S12设置为master,正常发生完数据后,再读数据寄存器,其值为零,应该没问题吧。 ...

    但是我单步执行程序监控数据寄存器里的值的时候发现,数据寄存器并没有变化呢~
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    14

    主题

    777

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1234
    最后登录
    2015-9-13
     楼主| 发表于 2015-7-24 16:52:16 | 显示全部楼层
    jinyi7016 发表于 2015-7-23 13:04
    串口监控?这个不好监控把,仿真了没

    嗯,确实用串口监控不太好,后来我用仿真单步执行,监控数据寄存器中的值,发现并没有变化,这应该是数据没发出去吧,但是为什么MOSI上却有波形输出呢?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-21 00:35 , Processed in 0.167505 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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