查看: 4324|回复: 14

[分享] 官方freedom的KL26 SPI 例程

[复制链接]
  • TA的每日心情
    开心
    2016-11-14 15:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    63

    主题

    605

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1783
    最后登录
    2016-11-14
    发表于 2015-6-25 12:02:01 | 显示全部楼层 |阅读模式
    帮忙解释下下面的SPI demo例程是干什么的,看不出来是用来做什么的,就是串口打印出一堆东西出来,请详细说明下!/** ###################################################################
    **     Filename    : ProcessorExpert.c
    **     Project     : ProcessorExpert
    **     Processor   : MKL25Z128VLK4
    **     Version     : Driver 01.01
    **     Compiler    : GNU C Compiler
    **     Date/Time   : 2012-08-08, 16:59, # CodeGen: 0
    **     Abstract    :
    **         Main module.
    **         This module contains user's application code.
    **     Settings    :
    **     Contents    :
    **         No public methods
    **
    ** ###################################################################*/
    /* MODULE ProcessorExpert */


    /* Including needed modules to compile this module/procedure */
    #include "Cpu.h"
    #include "Events.h"
    #include "Blue_LED.h"
    #include "Green_LED.h"
    #include "Red_LED.h"
    #include "CsIO1.h"
    #include "IO1.h"
    #include "SM1.h"
    #include "SS1.h"
    /* Including shared modules, which are used for whole project */
    #include "PE_Types.h"
    #include "PE_Error.h"
    #include "PE_Const.h"
    #include "IO_Map.h"

    /* User includes (#include below this line is not maintained by Processor Expert) */
    #include "stdio.h"
    #include <string.h>

    /* Global Variables */
    #define DATA_SIZE 13

    volatile bool SlaveReceivedFlg = FALSE;
    volatile bool MasterReceivedFlg = FALSE;

    char master_send[16]    = {0};
    char slave_send[16]     = {0};
    char master_receive[16] = {0};
    char slave_receive[16]  = {0};

    int main(void)
    {
      /* Write your local variable definition here */
      uint32 i = 0;

      /*** Processor Expert internal initialization. DON'T REMOVE THIS CODE!!! ***/
      PE_low_level_init();
      /*** End of Processor Expert internal initialization.                    ***/

      /* Write your code here */

    printf ("\n\n");  
    printf("********************************************************\n");
    printf("*                                                       \n");
    printf("* Running SPI Demo, Master & Slave exchanged messages   \n");
    printf("* Before continuing connect SPI0(Master)         \n");
    printf("* to SPI1 (Slave) as outlined below              \n");
    printf("*                                                \n");
    printf("* MOSI:  PTA17 (J2 pin 11) to PTE1 (J2 pin 20)   \n");
    printf("* MISO:  PTA16 (J2 pin  9) to PTE3 (J9 pin 11)   \n");
    printf("* SCK:   PTC5  (J1 pin  9) to PTE2 (J9 pin  9)   \n");
    printf("* PCS0:  PTC4  (J1 pin  7) to PTE4 (J9 pin 13)   \n");
    printf("*                                                \n");
    printf("* Then enter any key to continue                 \n");
    printf("*                                                \n");
    printf("********************************************************\n");
    printf ("\n\n");

    //  Due to a CodeWarrior/ProcessorExpert issue with the standard getchar and putchar
    //  functions, a local function must be used here to get a single character from the
    //  terminal.  
      uart_getchar(TERM_PORT_NUM);

      /* BLUE LED ON */
      Blue_LED_ClrVal(Blue_LED_DeviceData);   

      /* Slave sends dummy message and waits for receiving some message from master*/
      strcpy(slave_send,"Message_dummy");  
      SS1_SendBlock(SS1_DeviceData, slave_send, DATA_SIZE);
      SS1_ReceiveBlock(SS1_DeviceData, slave_receive, DATA_SIZE);

      for(;;){

      /* Master sends message 1  */
      printf("\n\nMaster: Sending message1...\n");  
      strcpy(master_send,"Send_Message1");  
      SM1_SendBlock(SM1_DeviceData, master_send, DATA_SIZE);   
      SM1_ReceiveBlock(SM1_DeviceData, master_receive, DATA_SIZE);

       /* waiting for transferring completed  */
      MasterReceivedFlg = FALSE;
      while(!MasterReceivedFlg);

      /* Master sends dummy message to receive response from slave */
      strcpy(master_send,"Message_dummy");  
      SM1_SendBlock(SM1_DeviceData, master_send, DATA_SIZE);   
      SM1_ReceiveBlock(SM1_DeviceData, master_receive, DATA_SIZE);

       /* waiting for transferring completed  */  
      MasterReceivedFlg = FALSE;
      while(!MasterReceivedFlg);   

      for(i=0;i<10000000;i++){} //Delay
      //***************************************************************

        /* Master sends message 2  */
      printf("\n\nMaster: Sending message2...\n");
      strcpy(master_send,"Send_Message2");
      SM1_SendBlock(SM1_DeviceData, master_send, DATA_SIZE);   
      SM1_ReceiveBlock(SM1_DeviceData, master_receive, DATA_SIZE);

      /* waiting for transferring completed  */
      MasterReceivedFlg = FALSE;
      while(!MasterReceivedFlg);

      /* Master sends dummy message to receive response from slave */
      strcpy(master_send,"Message_dummy");  
      SM1_SendBlock(SM1_DeviceData, master_send, DATA_SIZE);   
      SM1_ReceiveBlock(SM1_DeviceData, master_receive, DATA_SIZE);

       /* waiting for transferring completed  */
      MasterReceivedFlg = FALSE;
      while(!MasterReceivedFlg);  


      for(i=0;i<10000000;i++){} //Delay
      //***************************************************************

       }


      /*** Don't write any code pass this line, or it will be deleted during code generation. ***/
      /*** RTOS startup code. Macro PEX_RTOS_START is defined by the RTOS component. DON'T MODIFY THIS CODE!!! ***/
      #ifdef PEX_RTOS_START
        PEX_RTOS_START();                  /* Startup of the selected RTOS. Macro is defined by the RTOS component. */
      #endif
      /*** End of RTOS startup code.  ***/
      /*** Processor Expert end of main routine. DON'T MODIFY THIS CODE!!! ***/
      for(;;){}
      /*** Processor Expert end of main routine. DON'T WRITE CODE BELOW!!! ***/
      return 0;
    } /*** End of main routine. DO NOT MODIFY THIS TEXT!!! ***/

    /* END ProcessorExpert */
    /*
    ** ###################################################################
    **
    **     This file was created by Processor Expert 10.0 [05.02]
    **     for the Freescale Kinetis series of microcontrollers.
    **
    ** ###################################################################
    */


    回复

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-6-25 12:51:07 | 显示全部楼层
    楼主你好,你看的是KL26的PE代码吧。
    这个代码的功能是实现KL26两个SPI模块之间的数据通信。
    一个SPI作为主机,一个SPI作为从机,然后实现两个模块的数据交换。
    Message_dummy,Sending message1就是主从之间涉及的交换数据。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-7-23 21:04
  • 签到天数: 103 天

    连续签到: 1 天

    [LV.6]常住居民II

    228

    主题

    5379

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    16714
    最后登录
    1970-1-1
    发表于 2015-6-25 13:12:12 | 显示全部楼层
    楼主,上面版主说的正确!其实代码串口输出的就是程序的功能和操作方法,非常明确的。再看看
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-14 15:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    63

    主题

    605

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1783
    最后登录
    2016-11-14
     楼主| 发表于 2015-6-25 13:50:09 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2015-6-25 12:51
    楼主你好,你看的是KL26的PE代码吧。
    这个代码的功能是实现KL26两个SPI模块之间的数据通信。
    一个SPI作为主 ...

    这是运行在串口打印出来的东西,我跟踪过代码,他好像执行到图片二的最后那一句:while(!MasterReceivedFlg); 然后就卡在那里一直不懂了,请问这是怎么回事,下面的代码不执行了吗。
    1.png
    2.png
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-6-25 14:15:22 | 显示全部楼层
    最后无事 发表于 2015-6-25 13:50
    这是运行在串口打印出来的东西,我跟踪过代码,他好像执行到图片二的最后那一句:while(!MasterReceivedF ...

    你板子上线没接把?
    按照打印信息,把8个脚两两相接,通信线都不接,怎么可能收到数据?
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-14 15:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    63

    主题

    605

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1783
    最后登录
    2016-11-14
     楼主| 发表于 2015-6-25 14:20:25 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2015-6-25 14:15
    你板子上线没接把?
    按照打印信息,把8个脚两两相接,通信线都不接,怎么可能收到数据? ...

    我是大傻瓜,这特么的不知道,请暴打我一顿!
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-6-25 14:29:48 | 显示全部楼层
    最后无事 发表于 2015-6-25 14:20
    我是大傻瓜,这特么的不知道,请暴打我一顿!

    把线接上,比如MOSI:  PTA17 (J2 pin 11) to PTE1 (J2 pin 20)
    这个就是J2的11脚链接J2的20脚。
    其他类同。
    接上后就能循环通信打印了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2016-11-14 15:33
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    63

    主题

    605

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1783
    最后登录
    2016-11-14
     楼主| 发表于 2015-6-25 14:39:27 | 显示全部楼层
    FSL_TICS_ZJJ 发表于 2015-6-25 14:29
    把线接上,比如MOSI:  PTA17 (J2 pin 11) to PTE1 (J2 pin 20)
    这个就是J2的11脚链接J2的20脚。
    其他类 ...

    我发现一个很蛋疼的问题,因为我用SPI例程是KL25的,按照KL25的原理图上这样做是没有问题的,但是我刚刚查看了一下KL26的原理图,发现他的J2 11引脚是悬空的,我就不淡定了,这是要我自己改代码吗?
    QQ截图20150625143723.png
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-12-22 09:09
  • 签到天数: 12 天

    连续签到: 1 天

    [LV.3]偶尔看看II

    24

    主题

    446

    帖子

    0

    高级会员

    Rank: 4

    积分
    876
    最后登录
    2019-3-8
    发表于 2015-6-25 16:45:09 | 显示全部楼层
    讨论的很热烈啊
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    145

    主题

    4926

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    9267
    最后登录
    1970-1-1
    发表于 2015-6-25 17:43:42 | 显示全部楼层
    最后无事 发表于 2015-6-25 14:39
    我发现一个很蛋疼的问题,因为我用SPI例程是KL25的,按照KL25的原理图上这样做是没有问题的,但是我刚刚 ...

    你用的是KL25的代码啊?
    那你到PE里面把主从机引脚换掉。
    换为你KL26相应的SPI的引脚,然后再相连就可以了。
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-27 22:10 , Processed in 0.104745 second(s), 28 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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