⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tle7231.c

📁 飞思卡尔DZ60芯片SPI接口与TLE7231通讯的源码
💻 C
字号:

#include <MC9S08DZ60.h>                /* I/O map for MC9S08DZ60MLH */
#include "MCUinit.h"
 
char TLE7231G(char SIDATA){    //定义驱动TLE7231G的函数,主函数通过参数传递控制驱动的状态
	                             //
	SENDCHAR(SIDATA);                             
}

 void SPI_init(void) {
	                                  //初始化主SPI器件,不同的驱动芯片波特率会有不同。
		SPIC1 = 0x57;                   //01010111
		                 //详细说明见下
		SPIC2 = 0x19;                   //00011010    
		SPIBR = 0x00;                   //波特率设置为2000KHZ
		SPIS = 0x20;                  //SPI状态寄存器
		SPID = 0x00;                //SPI数据寄存器
	}
	
/*
SPI初始化:
SPIC1:BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0   //SPI控制寄存器1
	    SPIE SPE SPTIE MSTR CPOL CPHA SSOE LSBFE  //标志位
	     |    |    |    |    |     |    |    |------LSB先发(移位器方向)
	     |    |    |    |    |     |    |            0:SPI串行数据传输始于最高位 
	     |    |    |    |    |     |    |            1:SPI串行数据传输始于最低位
	     |    |    |    |    |     |    |-----------辅选择输出使能
	     |    |    |    |    |     |                 0:MODFEN=0时,通用I/O口;MODFEN=1时,模式故障的SS输入;
	     |    |    |    |    |     |                 1:MODFEN=0时,通用I/O口;MODFEN=1时,自动SS输出;
	     |    |    |    |    |     |----------------时钟相位
	     |    |    |    |    |                       0:SPSCK上的第一个边沿出现在8周期数据传输的第一个周期的中央
	     |    |    |    |    |                       1:SPSCK上的第一个边沿出现在8周期数据传输的第一个周期的起点
	     |    |    |    |    |----------------------时钟极性
	     |    |    |    |                            0:SPI时钟高有效(闲置低态)
	     |    |    |    |                            1:SPI时钟低有效(闲置高态)
	     |    |    |    |---------------------------主/辅模式选择
	     |    |    |                                 0:SPI模块配置为辅SPI器件
	     |    |    |                                 1:SPI模块配置为主SPI器件
	     |    |    |--------------------------------SPI发送中断使能
	     |    |                                      0:禁止从SPTEF中中断(使用轮询)
	     |    |                                      1:当SPTEF为1时,请求硬件中断
	     |    |-------------------------------------SPI系统使能
	     |                                           0:SPI系统禁止
	     |                                           1:SPI系统使能
	     |------------------------------------------ SPI中断使能标志
	                                                 0:禁止从SPRF和MODF中中断(使用轮询)
	                                                 1:当SPRF或MODF为1时,请求硬件中断
SPIC2:BIT7 BIT6 BIT5 BIT4  BIT3  BIT2 BIT1 BIT0   //SPI控制寄存器2
	     0    0    0 MODFEN BIDIROE 0 SPISWAI SPC0  //标志位
	     |    |    |    |    |      |    |    |-------管脚控制
	     |    |    |    |    |      |    |            0:SPI为数据输入和数据输出使用独立管脚 
	     |    |    |    |    |      |    |            1:SPI配置用于单线双向运行
	     |    |    |    |    |      |    |-----------SPI停止在等待模式
	     |    |    |    |    |      |                 0:在等待模式中,SPI时钟继续运行
	     |    |    |    |    |      |                 1:MCU进入等待模式,SPI时钟停止
	     |    |    |    |    |      |---------------该位不执行,时钟读为0
	     |    |    |    |    |----------------------双向模式输出使能
	     |    |    |    |                            0:输出驱动器禁止,因此SPI数据I/O管脚作为输入
	     |    |    |    |                            1:SPI I/O管脚作为输出使能
	     |    |    |    |---------------------------主模式故障功能使能
	     |    |    |                                 0:模式故障功能禁止,主SS管脚作为不受SPI控制的通用I/O口
	     |    |    |                                 1:模式故障功能使能,主SS管脚用作模式故障输入或辅选择输出
	     |    |    |--------------------------------该位不执行,始终读为0
	     |    |-------------------------------------该位不执行,始终读为0
	     |------------------------------------------该位不执行,始终读为0
SPIBR:BIT7 BIT6 BIT5 BIT4  BIT3 BIT2 BIT1 BIT0          //SPI波特率寄存器
	     0   SPPR2 SPPR1SPPR0 SPR3 SPR2 SPR1 SPR0          //SPI时钟频率=主时钟/预分频系数/速率系数
	           |    |    |      |----|----|----|----------速率系数:
	           |    |    |      0    0    0    0----------2
	           |    |    |      0    0    0    1----------4
	           |    |    |      0    0    1    0----------8
	           |    |    |      0    0    1    1----------16
	           |    |    |      0    1    0    0----------32
	           |    |    |      0    1    0    1----------64
	           |    |    |      0    1    1    0----------128
	           |    |    |      0    1    1    1----------256
	           |    |    |      1    0    0    0----------512
	           |----|----|--------------------------------预分频系数:                 
	           0    0    0--------------------------------1
	           0    0    1--------------------------------2
	           0    1    0--------------------------------3
	           0    1    1--------------------------------4
	           1    0    0--------------------------------5
	           1    0    1--------------------------------6
	           1    1    0--------------------------------7
	           1    1    1--------------------------------8
	           
SPIS:BIT7 BIT6 BIT5 BIT4  BIT3  BIT2 BIT1 BIT0            //SPI状态寄存器
	   SPRF      SPTEF MODF  0     0    0    0              //只读寄存器,写无效
	    |    	    |     |----------------------------主模式故障标志
	    |    	    |                                  0:无模式故障错误
	    |    	    |                                  1:检测到模式故障错误
	    |    	    |----------------------------------SPI发送缓冲器空标记
	    |    	                                       0:SPI发送缓冲器不空
	    |    	                                       1:SPI发送缓冲器空 
	    |--------------------------------------------SPI读缓冲器已满标志
	                                                 0:接受数据缓冲器中无数据可用
	                                                 1:接受数据缓冲器中有数据
*/

/*
char TLE7231_INIT()                 //初始化7231,即每次改变7231状态都要重新初始化
{char A;
	 A = 0x00 ;                       //使TLE7231G工作空闲模式,各通}道处于清零模式
	 SENDCHAR(A); 
}                                //若使TLE7231G工作在休眠模式,则RESET引脚送LOW
 
*/    

                                    
	
/*
初始化TLE7231
*/
/*
TLE7231G输入输出数据协议:
SI--输入寄存器
SI_DATA:BIT7BIT6 BIT5BIT4 BIT3BIT2 BIT1BIT0   //输入数据字节
          IN3       IN2     IN1       IN0    -----INn指第n通道的模式
          00        00      00        00     -----00清零模式
          00        01      01        01     -----01输入模式
          00        10      10        10     -----10通道打开模式
          00        11      11        11     -----11通道关闭模式
SO--诊断寄存器
SO_DATA:CS BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0    //输出数据字节
       TER OL3  D3   OL2  D2   OL1  D1   OL0  D0      --OLn:n通道空载标志位;Dn:n通道诊断标志位
        |   0 ----------------------------------------------正常
        |   1 ----------------------------------------------在关闭模式下空载
        |       0-------------------------------------------正常
        |       1-------------------------------------------n通道因过载或过温关闭                                            
        |                                             --TER:传输错误标志位   
        0---------------------------------------------------成功传输                                             
        1---------------------------------------------------传输错误或者是首次传输                                             
*/

char SENDCHAR(char CHA){            //发送1个8字节数据函数
/*    char STATUS=SPIS_SPRF;
	if(STATUS==1)                       //如果接受数据缓冲器还没有被读取,则发起SPI传输无效
	   return 0x80;                      //返回错误状态;
	else 
		if(SPIS_SPTEF==1)                 //如果发送缓冲器不为空,则无法发起新的SPI传输
			   return 0x20;                          //返回错误状态        
			else       */
			  SPID=CHA;
			                         //返回正常发送信号
			}
			
char RECVCHAR(){             //接受1个8字节数据函数
  char STAT,CHR;
	STAT=SPIS;                 //读SPIS状态寄存器
	if(STAT&0x10)             //00100000进行位与,SPIS_MODF为1说明模式错误
	renturn 0x10;            //返回错误信息  
	else
	CHR=SPID;                    //读取SPID中数据
	return CHR;  
}

/* 
  */                       

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -