📄 led.c
字号:
#include "led.h"
#include "mc9s12dt128.h"
/*======================================================================*/
/* GLOBAL DEFINITIONS */
/*======================================================================*/
unsigned char CS_PortSect; //CS port select variable
unsigned char SPI_Channel; //spi channel select: 0 :spi0,1:spi1
unsigned char spi0_status;
unsigned int spi0_rvdata;
unsigned char spi1_status;
unsigned char spi1_rvdata;
/*======================================================================*/
/* LOCAL SYMBOL DECLARATIONS */
/*======================================================================*/
#define SPI0_BAUDRATE_PRE 0x00 //spi0 baudrate preselect
#define SPI0_BAUDRATE_SET 0x02 //spi0 baudrate select
#define SPI1_BAUDRATE_PRE 0x00 //spi1 baudrate preselect
#define SPI1_BAUDRATE_SET 0x02 //spi1 baudrate selec
/*======================================================================*/
/* LOCAL FUNCTION PROTOTYPES */
/*======================================================================*/
void SPICS_Select1(byte port);
void SPICS_Select2(byte port);
void SPI0_Init(void);
void SPI0_Enable(void);
void SPI0_Disable(void);
word SPI0_SendRecv(word data);
void SPI1_Init(void);
void SPI1_Enable(void);
void SPI1_Disable(void);
word SPI1_SendRecv(word data);
//void SPI1_SendRecv(byte command,word data);
void LED_Drive1(word data);
void LED_Drive2(word data);
void LED_Drive3(word data);
void LED_DriveNull(word data);
void SPICS_Select1(byte port)
{
switch (port) {
case P_SPI0_CSA:
SPI0_CSA = LOW;
break;
case P_SPI0_CSB:
SPI0_CSB = LOW;
break;
case P_SPI1_CSA:
SPI1_CSA = LOW;
break;
case P_SPI1_CSB:
SPI1_CSB = LOW;
break;
case P_SPI1_CSC:
SPI1_CSC = LOW;
break;
case P_SPI1_CSD:
SPI1_CSD = LOW;
break;
case P_NULL:
SPI1_NULL = LOW;
break;
}
}
void SPICS_Select2(byte port)
{
switch (port) {
case P_SPI0_CSA:
SPI0_CSA = HIGH;
break;
case P_SPI0_CSB:
SPI0_CSB = HIGH;
break;
case P_SPI1_CSA:
SPI1_CSA = HIGH;
break;
case P_SPI1_CSB:
SPI1_CSB = HIGH;
break;
case P_SPI1_CSC:
SPI1_CSC = HIGH;
break;
case P_SPI1_CSD:
SPI1_CSD = HIGH;
break;
case P_NULL:
SPI1_NULL = HIGH;
break;
}
}
void SPI0_Init(void) {
//SPI0CR1 bit set
//SPI0CR1_SPIE = 0; //SPI interruptdisabled.
//SPI0CR1_SPE = 0; //SPI system disabled.
//SPI0CR1_SPTIE = 0; //SPI interrupt disabled.
SPI0CR1_MSTR = 1; //SPI master mode select.
//SPI0CR1_CPOL = 0; //SPI clock polarity :low idle select.
SPI0CR1_CPHA = 1; //The first sck is the beginning.
//SPI0CR1_SSOE = 0; //SS output is not used.
//SPI0CR1_LSBFE = 0; //Data is transferred MSB first.
//SPI0CR2 bit set
//SPI0CR2_MODFEN =0; //MODF error disabled.
//SPI0CR2_BIDIROE =0; //Output buffer disabled.
//SPI0CR2_SPISWAI =0; //SPI click operate normally in wait state.
//SPI0CR2_SPC0 =0;
//SPI0BR bit set
SPI0BR = (SPI0_BAUDRATE_PRE<<4)|SPI0_BAUDRATE_SET; //SPI baudrate set
//SPI0DR bit set
//SPI0DR = 0; //SPI data register clear.
}
void SPI0_Enable(void) {
SPI0CR1_SPE = 1; //SPI system enabled.
}
void SPI0_Disable(void) {
SPI0CR1_SPE = 0; //SPI system enabled.
}
word SPI0_SendRecv(word data) {
word tmp_data;
word tmp_data_h;
word tmp_data_l;
while (SPI0SR_SPTEF == 0); //wait until spi transmit int enabled
SPICS_Select1(CS_PortSect);
//SPI0_CSA = LOW; //SPI0 CS low,enable transfer/receive data
SPI0DR = data >> 8; //write data MSB to spi data register
while (SPI0SR_SPIF == 0); //wait until spi int enabled
tmp_data_h = SPI0DR; //read spi input data
while (SPI0SR_SPTEF == 0); //wait until spi transmit int enabled
SPI0DR = data & 0x00ff; //write data LSB to spi data register
while (SPI0SR_SPIF == 0); //wait until spi int enabled
tmp_data_l = SPI0DR;
SPICS_Select2(CS_PortSect);
//SPI0_CSA = HIGH; //cs high ,disable transmit data.
tmp_data = (tmp_data_h<<8)|tmp_data_l; //read data from slave
return tmp_data;
//spi0_status = IDLE; //spi bus is idle.
}
void SPI1_Init(void) {
//SPI1CR1 bit set
//SPI1CR1_SPIE = 0; //SPI interruptdisabled.
//SPI1CR1_SPE = 0; //SPI system disabled.
//SPI1CR1_SPTIE = 0; //SPI interrupt disabled.
SPI1CR1_MSTR = 1; //SPI master mode select.
//SPI1CR1_CPOL = 0; //SPI clock polarity :low idle select.
SPI1CR1_CPHA = 1; //The first sck is the beginning.
//SPI1CR1_SSOE = 0; //SS output is not used.
//SPI1CR1_LSBFE = 0; //Data is transferred MSB first.
//SPI1CR2 bit set
//SPI1CR2_MODFEN =0; //MODF error disabled.
//SPI1CR2_BIDIROE =0; //Output buffer disabled.
//SPI1CR2_SPISWAI =0; //SPI click operate normally in wait state.
//SPI1CR2_SPC0 =0;
//SPI1BR bit set
SPI1BR = (SPI1_BAUDRATE_PRE<<4)|SPI1_BAUDRATE_SET; //SPI baudrate set
//SPI1DR bit set
//SPI1DR = 0; //SPI data register clear.
}
void SPI1_Enable(void) {
SPI1CR1_SPE = 1; //SPI system enabled.
}
void SPI1_Disable(void) {
SPI1CR1_SPE = 0; //SPI system enabled.
}
word SPI1_SendRecv(word data) {
word tmp_data;
word tmp_data_h;
word tmp_data_l;
while (SPI1SR_SPTEF == 0); //wait until spi transmit int enabled
SPICS_Select1(CS_PortSect);
//SPI1_CSA = LOW; //SPI0 CS low,enable transfer/receive data
SPI1DR = data >> 8; //write data MSB to spi data register
while (SPI1SR_SPIF == 0); //wait until spi int enabled
tmp_data_h = SPI1DR; //read spi input data
while (SPI1SR_SPTEF == 0); //wait until spi transmit int enabled
SPI1DR = data & 0x00ff; //write data LSB to spi data register
while (SPI1SR_SPIF == 0); //wait until spi int enabled
tmp_data_l = SPI1DR;
SPICS_Select2(CS_PortSect);
//SPI1_CSA = HIGH; //cs high ,disable transmit data.
tmp_data = (tmp_data_h<<8)|tmp_data_l; //read data from slave}
return tmp_data;
//spi1_status = IDLE; //spi bus is idle.
}
/*======================================================================*/
/* FUNCTIONS */
/*======================================================================*/
/*
; FUNCTION NAME: LED_Drive
; PACKAGE:
; COMPONENT:
; APPLICATION:
; SCOPE:
; PARAMETER:
; DESCRIPTION: LED drive output from spi1 port,data is led status.
*/
/*======================================================================*/
void LED_Drive1(word data)
{
SPI1CR1_CPOL = 1; //data polarity select
CS_PortSect = P_SPI1_CSB;
(void)SPI1_SendRecv(data);
SPI1CR1_CPOL = 0;
}
void LED_Drive2(word data)
{
SPI1CR1_CPOL = 1; //data polarity select
CS_PortSect = P_SPI1_CSC;
(void)SPI1_SendRecv(data);
SPI1CR1_CPOL = 0;
}
void LED_Drive3(word data)
{
SPI1CR1_CPOL = 1; //data polarity select
CS_PortSect = P_SPI1_CSD;
(void)SPI1_SendRecv(data);
SPI1CR1_CPOL = 0;
}
void LED_DriveNull(word data)
{
SPI1CR1_CPOL = 1; //data polarity select
CS_PortSect = P_NULL;
(void)SPI1_SendRecv(data);
SPI1CR1_CPOL = 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -