View Single Post
Old 29-07-2009, 12:28 PM   #3
Serenade
Nhập môn đệ tử
 
Tham gia ngày: Oct 2008
Bài gửi: 6
:
Đương nhiên là cấu hình byte rùi bạn.

Code:
#define EE_SSPIF_BIT IFS2bits.SPI2IF
#define SPIREAD     0x03
#define SPIWRITE    0x02
#define SPIWRDI     0x04
#define SPIWREN     0x06
#define SPIRDSR     0x05
#define SPIWRSR     0x01

/*********************************************************************/
void EE_SPIPut(BYTE v)
{
   BYTE dummy;

   EE_SSPIF_BIT = 0;
   dummy = EE_SSPBUF_REG; 
   EE_SSPBUF_REG = v;
   while(EE_SSPIF_BIT == 0 );
}
/*********************************************************************/
BYTE EE_SPIGet(void)
{
   EE_SPIPut(0x00);
   return EE_SSPBUF_REG; 
}
/*********************************************************************/

BYTE NVMRead(DWORD address)// read a 16-bit value starting at an even address
{
 	BYTE msb,lsb,temp;
	
	// wait until any work in progress is completed
	do 
	{
		SPISelectEEPROM();
		EE_SPIPut(SPIRDSR);
		temp = EE_SPIGet();//read status register
		SPIUnselectEEPROM();
	}while(temp & 0x03);
	
	// perform a 16-bit read sequence (two byte sequential read)
	SPISelectEEPROM();			// select the Serial EEPROM
	EE_SPIPut(SPIREAD);// read command
	EE_SPIPut(address >> 8);	// address MSB first
	EE_SPIPut(address & 0xff);// address LSB (word aligned)
	//msb = EE_SPIGet();
	lsb = EE_SPIGet();	
	SPIUnselectEEPROM();
	return (lsb);

}//ReadNVM
/*********************************************************************/
void NVMWrite( DWORD address, BYTE data)
{ // write a 16-bit value starting at an even address
	BYTE temp;
	// wait until any work in progress is completed
	do
	{
		SPISelectEEPROM();
		EE_SPIPut(SPIRDSR);
		temp = EE_SPIGet();//read status register
		SPIUnselectEEPROM();
	}while(temp & 0x03);
	// Set the Write Enable Latch
	SPISelectEEPROM();
	EE_SPIPut(SPIWREN);
	SPIUnselectEEPROM();
	
	// perform a 16-bit write sequence (2 byte page write)
	SPISelectEEPROM();					// select the Serial EEPROM
	EE_SPIPut(SPIWRITE);
	EE_SPIPut(address >> 8);		//address MSB first
	EE_SPIPut(address & 0xff);	// address LSB (word aligned)
	EE_SPIPut(data);
	SPIUnselectEEPROM();

}//WriteNVM

thay đổi nội dung bởi: namqn, 29-07-2009 lúc 05:43 PM. Lý do: định dạng code
Serenade vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn