📄 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 + -