MC9S12XEP100 SPI模块 驱动程序

最新更新时间:2021-07-30来源: eefocus关键字:MC9S12XEP100  SPI模块  驱动程序

之前发了MC9S12XEP100数据手册上的SPI模块的翻译http://blog.csdn.net/lin_strong/article/details/79122482。


于是乎,现在对其的封装也来了。目前先完成了硬件驱动部分的封装。软件部分还没完全想好怎么弄。


这次的封装我尝试使用两个头文件的方式来区分protect与public。

全部内部使用的函数(不带参数检查)都放在了SPI_Internal.h中,而对用户的接口(可选参数检查)都放在了SPI.h中

使用时请只#include “SPI.h” 然后使用里头提供的接口。


下面上代码:


/*

*******************************************************************************************

*

*

*                       SPI(Serial Peripheral Interface) SUPPORT PACKAGE

*                                         SPI支持包

*

* File : SPI.h

* By   : Lin Shijun(http://blog.csdn.net/lin_strong)

* Date:  2019/03/05

* version: V1.1

* History: 2018/02/01  V1.0   the prototype

*          2019/03/05  V1.1   some modification to the malloc configuration.

*                             uncomment struct style initializer and change name to SPI_InitExt

*                               to include both initializers.

* NOTE(s):a.refer to the code of uCOS-II

*         b.this file define the interface for user. user should include this file to use the 

*           spi module.

*         c.this module has three files — SPI.h、SPI_Internal.h、SPI.c

*         d.steps to use this module:

*              1. define malloc to configure the parameters in CONFIGURE and INITIALIZATION

*                 CONFIGURE, or use the default.

*              2. use the interface function to send/receive data. e.g.

*                   ......

*                   INT8U dataSend,dataRecv;

*                   SPI_Init(SPI0);

*                   SPI_Enable(SPI0);

*                   while(TRUE){

*                      dataRecv = SPI_ExchangeChar(SPI0,dataSend);

*                      // deal with the dataRecv.

*                   }

*********************************************************************************************

*/


#ifndef   SPI_H

#define   SPI_H


/*

*******************************************************************************************

*                                    INCLUDES

*******************************************************************************************

*/


#include

#include "common.h"


/*

******************************************************************************************

*                                    CONSTANT

******************************************************************************************

*/


#define   SPI0      0x00                         /*   SPI0           */

#define   SPI1      0x01                         /*   SPI1           */

#define   SPI2      0x02                         /*   SPI2           */



// spi behavior when cpu is in wait mode

#define SPI_INWAITMODE_STOP    0      // SPI module will keep running when cpu in wait mode

#define SPI_INWAITMODE_RUN     1      // SPI module will stop when cpu in wait mode


// format of spi clock

#define SPI_SCKFMT_MODE_0      0      // CPHA=0、CPOL=0

#define SPI_SCKFMT_MODE_1      1      // CPHA=0、CPOL=1

#define SPI_SCKFMT_MODE_2      2      // CPHA=1、CPOL=0

#define SPI_SCKFMT_MODE_3      3      // CPHA=1、CPOL=1


// the bit order when transmit/receive.

#define SPI_BITORDER_LSB       0      // Least significant bit first

#define SPI_BITORDER_MSB       1      // Most significant bit first


// how spi system control SS pin

#define SPI_SS_CTRL_OFF        0      // SPI module don't use SS pin.

#define SPI_SS_CTRL_ON         1      // only for master, SS pin is used for slave control.

#define SPI_SS_LISTEN_MODF     2      // only for master, SS pin is used for listening mode fault 


/*

*******************************************************************************************

*                               CONFIGURATION 主配置

*******************************************************************************************

*/


// TRUE: just use single port(declare in SPI_MONOPORT_USED), so the module can create

//       optimised code.


// #define SPI_MONOPORT_NEEDED to specify that you will just use one SPI port

#ifdef  SPI_MONOPORT_NEEDED

// if just use one SPI port, #define SPI_MONOPORT_USED to specify which port you use.

// default SPI0

  #ifndef SPI_MONOPORT_USED

    #define SPI_MONOPORT_USED    SPI0

  #endif

#endif


// #define SPI_ARGUMENT_CHECK_DISABLE to specify that you don't need the argument check

//   function of spi module.

// #define SPI_ARGUMENT_CHECK_DISABLE


/*

****************************************************************************************

*                                  ERROR CODES

****************************************************************************************

*/


#define  SPI_NO_ERR            0        /* Function call was successful                       */  

#define  SPI_INVALID_PORT      1        /* Invalid communications port channel                */  

#define  SPI_ARGUMENT_OUT      2        /* Argument out of range                              */  

#define  SPI_RX_EMPTY          3        /* Rx buffer is empty, no character available         */  

#define  SPI_TX_FULL           4        /* Tx buffer is full, could not deposit character     */  

#define  SPI_TX_EMPTY          5        /* If the Tx buffer is empty.                         */  

#define  SPI_RX_TIMEOUT        6        /* If a timeout occurred while waiting for a character*/  

#define  SPI_TX_TIMEOUT        7        /* If a timeout occurred while waiting to send a char.*/

#define  SPI_ERR_UNKNOWN       8


/*

******************************************************************************************

*                                  TYPE DEFINE

******************************************************************************************

*/

// for struct init-style

typedef struct spi_init_struct{

  unsigned char isMaster;   // TRUE: spi is master. FALSE: spi is slave.

  unsigned char SSctrl;     // see SPI_SS_CTRL

  unsigned char bitorder;   // see SPI_BITORDER

  unsigned char inWaitMode; // see SPI_INWAITMODE

  unsigned char sckfmt;     // see SPI_SCKFMT

// BaudRateDivisor = (SPPR + 1) * 2^(SPR + 1)

// BaudRate = Busclock / BaudRateDivisor

  unsigned char SPR;        // 0-7,SPI Baud Rate Selection

  unsigned char SPPR;       // 0-7,SPI Baud Rate Preselection

}SPI_INIT_STRUCT,*pSPI_INIT_STRUCT;


/*

*******************************************************************************************

*                        INITIALIZATION CONFIGURATION 初始化配置

*******************************************************************************************

*/


// the default parameter to initialize the SPI system

// 初始化SPI的默认参数


#ifndef SPI_INIT_ISMASTER

  #define SPI_INIT_ISMASTER         TRUE                 // TRUE: spi is master. FALSE: spi is slave.

#endif


#ifndef SPI_INIT_SSCTRL

  #define SPI_INIT_SSCTRL           SPI_SS_CTRL_OFF      // see SPI_SS_CTRL

#endif


#ifndef SPI_INIT_BITORDER

  #define SPI_INIT_BITORDER         SPI_BITORDER_MSB     // see SPI_BITORDER

[1] [2] [3] [4] [5] [6] [7]
关键字:MC9S12XEP100  SPI模块  驱动程序 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic543347.html

上一篇:基于8086CPU微处理器的分秒电子钟设计
下一篇:Motorola S-records(S19)解析模块

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

MC9S12XEP100 SCI(UART)驱动程序
首先先发个自己封装的MC9S12XEP100的SCI模块(也就是UART模块)的驱动。这些代码参考了 Li Yuan http://blog.csdn.net/liyuanbhu/article/details/7764851 的代码,整个代码风格是按照uCOS-II操作系统源码的风格来写的,在此表示感谢。目前还不是特别完整完善,但基本使用是没有问题了。首先是.h文件,除了硬件驱动程序,还有在基于uCOS-II操作系统的SCI驱动程序,这章先讲硬件驱动部分
发表于 2021-08-04
MC9S12XEP100 SCI(UART)<font color='red'>驱动程序</font>
MC9S12XEP100 FTM模块 驱动程序
控制器修改Flash内存内容或配置模拟EEPROM资源;控制过程如下图:本驱动程序对这个控制过程进行了封装(即FTM_LaunchCommand函数),并进一步对所有可用的命令进行了封装,提供了用户友好的接口,方便各位使用。下面上代码:先是FTM.h文件/*************************************************************************************************************                       
发表于 2021-07-30
MC9S12XEP100 FTM模块 <font color='red'>驱动程序</font>
MC9S12XEP100的ATD模块(ADC12B16CV1)
了ATD会怎么响应断点,如表12所示。存储节点和比较器参照电容上的泄露可能会降低被冻结的转换的精度,取决于冻结的时间。.表 10. 理想的ATD结果示例输入信号 VRL=0V VRH=5.12V8位(分辨率=20mV)10位(分辨率=5mV)12位(转换曲线有1.25mV的偏移)(分辨率=1.25mV)5.120V25510234095……………0.02214170.02014160.01814140.01613120.01413110.0121290.0101280.0080260.0060140.0040130.0030020.0020010.000000.表 11. 转换序列长度编码规则S8CS4CS2CS1C每个序列的转换
发表于 2021-07-30
<font color='red'>MC9S12XEP100</font>的ATD模块(ADC<font color='red'>12</font>B16CV1)
MC9S12XEP100 SCI(UART)驱动程序2 - 基于uCOS-II
首先先发一个自己封装的MC9S12XEP100的SCI模块(也就是UART模块)的驱动。这些代码参考了 Li Yuan http://blog.csdn.net/liyuanbhu/article/details/7764851 的代码,整个代码风格是按照uCOS-II操作系统源码的风格来写的,在此表示感谢。目前还不是特别完整完善,但基本使用是没有问题了。在上一章中已经发了硬件驱动部分,这里发下基于uCOS-II嵌入式操作系统的驱动部分以及顺便说下怎么用。首先要记得到上一章中把两个文件存了,顺便还要把.h文件中的SCI_UCOS_MODULE_ENABLE 后面改为 TRUE 以开启RTOS(嵌入式操作系统)驱动部分。目前这个版本
发表于 2021-07-26
4X4矩阵键盘扫描 基于MC9S12XEP100
_GLOBALS#include "MatKB.h"#include <MC9S12XEP100.h>/***********************************************************************************************                                   LOCAL VARIABLE 
发表于 2021-07-26
4X4矩阵键盘扫描 基于<font color='red'>MC9S12XEP100</font>
飞思卡尔16位单片机(十三)—— SPI模块测试
一、SPI模块介绍         串行外围器件接口(SPI)模块提供单片机和外围器件间的全双工、同步和串行通信。这些外围器件可以包括其他微控制器、模数移位器、移位寄存器、传感器和存储器等。SPI运行在主模式中最高可运行在总线时钟除以2的波特率上,在辅模式中最高可运行在总线时钟除以4的波特率上。        SPI的中心元件是SPI移位寄存器。数据写入双缓冲发射器(写入SPIDR),然后转移到位于数据传输起点的SPI移位寄存器。在数据字节中转换后,数据被传输到双缓冲接收器,在这里数据可以被读取(从SPIDR读取)。管脚复用逻辑控制着单片机
发表于 2021-07-19
飞思卡尔16位单片机(十三)—— <font color='red'>SPI</font><font color='red'>模块</font>测试
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved