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

📄 h8s1544spi.c

📁 瑞萨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 + -