NXP LPC11xx I2C Slave 从机程序芯片解密
- 芯片解密/****************************************************************************
- * $Id:: i2cslave.c 3635 2010-06-02 00:31:46Z usb00423 $
- * Project: NXP LPC11xx I2C Slave example
- *
- * Description:
- * This file contains I2C slave code example which include I2C slave
- * initialization, I2C slave interrupt handler, and APIs for I2C slave
- * access.
- *
- ****************************************************************************
- * Software that is described herein is for illustrative purposes only
- * which provides customers with programming information regarding the
- * products. This software is supplied "AS IS" without any warranties.
- * NXP Semiconductors assumes no responsibility or liability for the
- * use of the software, conveys no license or title under any patent,
- * copyright, or mask work right to the product. NXP Semiconductors
- * reserves the right to make changes in the software without
- * notification. NXP Semiconductors also make no representation or
- * warranty that such application will be suitable for the specified
- * use without further testing or modification.
- ****************************************************************************/
- #include "LPC11xx.h"/* LPC11xx Peripheral Registers */
- #include "type.h"
- #include "i2cslave.h"
- volatile uint32_t I2CMasterState = I2C_IDLE;
- volatile uint32_t I2CSlaveState = I2C_IDLE;
- volatile uint32_t I2CMode;
- volatile uint8_t I2CWrBuffer[BUFSIZE];
- volatile uint8_t I2CRdBuffer[BUFSIZE];
- volatile uint32_t I2CReadLength;
- volatile uint32_t I2CWriteLength;
- volatile uint32_t RdIndex = 0;
- volatile uint32_t WrIndex = 0;
- /*
- From device to device, the I2C communication protocol may vary,
- in the example below, the protocol uses repeated start to read data from or
- write to the device:
- For master read: the sequence is: STA,Addr(W),offset,RE-STA,Addr(r),data...STO
- for master write: the sequence is: STA,Addr(W),offset,RE-STA,Addr(w),data...STO
- Thus, in state 8, the address is always WRITE. in state 10, the address could
- be READ or WRITE depending on the I2C command.
- */
- /*****************************************************************************
- ** Function name:I2C_IRQHandler
- **
- ** Descriptions:I2C interrupt handler, deal with master mode only.
- **
- ** parameters:None
- ** Returned value:None
- **
- *****************************************************************************/
- void I2C_IRQHandler(void)
- {
- uint8_t StatValue;
- /* this handler deals with master read and master write only */
- StatValue = LPC_I2C->STAT;
- switch ( StatValue )
- {
- case 0x60:/* An own SLA_W has been received. */
- case 0x68:
- RdIndex = 0;
- LPC_I2C->CONSET = I2CONSET_AA;/* assert ACK after SLV_W is received */
- LPC_I2C->CONCLR = I2CONCLR_SIC;
- I2CSlaveState = I2C_WR_STARTED;
- break;
- case 0x80:/* data receive */
- case 0x90:
- if ( I2CSlaveState == I2C_WR_STARTED )
- {
- I2CRdBuffer[RdIndex++] = LPC_I2C->DAT;
- LPC_I2C->CONSET = I2CONSET_AA;/* assert ACK after data is received */
- }
- else
- {
- LPC_I2C->CONCLR = I2CONCLR_AAC;/* assert NACK */
- }

芯片解密