📄 h8s1544spi.c
字号:
#include "iodefine.h"
#include "machine.h"
#include "io_init.c"
#define uint unsigned int
#define uchar unsigned char
uchar ByteCnt=12; //the number of the lcd digital 24seg
uchar SlvAdr=0x70; //8576 address
uchar SubAdr=0x80; //control unit address
uchar MODE=0xc8;
uchar Blink_sel=0x70;//no blink in 4com
uchar W_Digit[12] = {0};
uchar R_Digit[12];
uchar default1=0;
uchar old_sw_key=1;
uchar new_sw_key;
uchar lcd_flip_key;
uchar page_pointer;
uchar num=2;
uchar bbb=0;
void delay(uint time) // 2us
{
uchar i;
do{
for(i=20;i!=0;i--);
} while(--time!=0);
}
/***********************************************************
initial SPI
;**********************************************************/
void SPI_init(void)
{
MSTP.CRC.BIT._SSU0 = 0; //Release SSU0 stop mode
SSU0.SSER.BIT.TE = 0; // disable transmit
SSU0.SSER.BIT.RE = 0; // disable receive
/*#pragma asm
MOV SSU0.SSCRH.BIT.SOLP,0
MOV SSU0.SSCRH.BIT.SOL,0
#pragma endasm
*/
SSU0.SSCRH.BYTE = 0x84; //master mode, sso\ssi are uesd,sso is low before transition,
//ssck is uesd,scs is uesd as i/o
SSU0.SSCRL.BYTE=0x00; //ssu mode is selected, data length is 8bits
SSU0.SSMR.BYTE=0xc5; //tansfer data at MSB first,low idle,high active,
// sampled at sencond edge,changes at first edge,Pfi/16=8*2/16=1M
SSU0.SSSR.BIT.ORER=0; // no overrun error occurs
SSU0.SSER.BIT.TE=1; // enable transmit
SSU0.SSER.BIT.RE=1; // enable receive
//SSU0.SSER.BIT.TEIE=1; //enable transmit end interrupt
//SSU0.SSER.BIT.TIE=1; //enable transmit interrupt
//SSU0.SSER.BIT.RIE=1; //enable recieve interrupt
//SSU0.SSER.BIT.CEIE=1; //enable conflict error interrupt
}
/***********************************************************
EWEN93C86SPI_transmit
;**********************************************************/
void EWEN_SPI_transmit(uchar ewen_commond0,uchar ewen_commond1)
{
// SSU0.SSSR.BIT.TDRE=0;
PI.DR.BIT.B3 = 1; // chip select HIGH
delay(5);
while (SSU0.SSSR.BIT.TDRE != 1) //when transmit data register is empty,write the data in
{
;
}
SSU0.SSTDR0 = ewen_commond0;
bbb = SSU0.SSRDR0;
delay(30);
while (SSU0.SSSR.BIT.TDRE != 1) //when transmit data register is empty,write the data in
{
;
}
SSU0.SSTDR0 = ewen_commond1;
bbb = SSU0.SSRDR0;
delay(30);
PI.DR.BIT.B3 = 0; // chip select LOW
SSU0.SSCRH.BIT.SOLP=0; // SOL bit write protect
SSU0.SSCRH.BIT.SOL=0; // data output is chaged tolow when transmit ends
delay(5);
}
/***********************************************************
WRITE93C86SPI_transmit
;**********************************************************/
void W_SPI_transmit(uchar w_commond0,uchar w_commond1,uchar aaa)
{uchar i;
PI.DR.BIT.B3 = 1; // chip select HIGH
delay(5);
while (SSU0.SSSR.BIT.TDRE != 1) //when transmit data register is empty,write the data in
{
;
}
SSU0.SSTDR0 = w_commond0;
bbb = SSU0.SSRDR0;
delay(30);
while (SSU0.SSSR.BIT.TDRE != 1) //when transmit data register is empty,write the data in
{
;
}
SSU0.SSTDR0 = w_commond1;
bbb = SSU0.SSRDR0;
delay(30);
while (SSU0.SSSR.BIT.TDRE != 1) //when transmit data register is empty,write the data in
{
;
}
SSU0.SSTDR0 = aaa;
bbb = SSU0.SSRDR0;
delay(4000);
PI.DR.BIT.B3 = 0; // chip select LOW
SSU0.SSCRH.BIT.SOLP=0;
SSU0.SSCRH.BIT.SOL=0;
delay(5);
}
/***********************************************************
READ93C86SPI_transmit
;**********************************************************/
void R_SPI_transmit(uchar r_commond0,uchar r_commond1)
{
PI.DR.BIT.B3 = 1; // chip select HIGH
delay(5);
while (SSU0.SSSR.BIT.TDRE != 1) //when transmit data register is empty,write the data in
{
;
}
SSU0.SSTDR0 = r_commond0;
bbb = SSU0.SSRDR0;
delay(30);
while (SSU0.SSSR.BIT.TDRE != 1) //when transmit data register is empty,write the data in
{
;
}
SSU0.SSTDR0 = r_commond1;
bbb = SSU0.SSRDR0;
delay(30);
while (SSU0.SSSR.BIT.TDRE != 1) //when transmit data register is empty,write the data in
{
;
}
SSU0.SSTDR0 = 0x00;
bbb = SSU0.SSRDR0;
delay(30);
while (SSU0.SSSR.BIT.RDRF != 1) //when receive data register is full, read the data out
{
;
}
R_Digit[1]=SSU0.SSRDR0;
PI.DR.BIT.B3 = 0; // chip select LOW
SSU0.SSCRH.BIT.SOLP=0;
SSU0.SSCRH.BIT.SOL=0;
delay(5);
// return(R_Digit);
}
//=============================================================================
//
// Main Program
//
//=============================================================================
void main(void)
{
SYSCR.WORD = 0xD103; //MAC Saturation Operation Control: non-saturation
//Instruction Fetch Mode Select: 32-bit mode
//External Bus Mode Enable: disable
//RAM Enable: enable
SCKCR.BIT.ICK=0x01; //System clock select
SCKCR.BIT.PCK=0x02; //Peripheral module clock select
SCKCR.BIT.BCK=0x03; //External clock select
SCKCR.BIT.PSTOP1=0x00;
SCKCR.BIT.POSEL1=0x00;
io_init();
SPI_init();
EWEN_SPI_transmit(0x26,0x00);
W_SPI_transmit(0x28,0x00,0xBC);
R_SPI_transmit(0x30,0x00);
while(1)
{
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -