Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void initChip(){
- CLKDIVbits.RCDIV = 0;
- AD1PCFG = 0x9FFE;
- I2C2CON = 0;
- TRISBbits.TRISB3 = 0;
- TRISBbits.TRISB2 = 0;
- I2C2BRG = 157;
- I2C2CONbits.I2CEN = 1;
- _MI2C2IF = 0;
- }
- void chipWrite(char reg, char data){
- //Start bit
- I2C2CONbits.SEN = 1;
- while(I2C2CONbits.SEN);
- IFS3bits.MI2C2IF = 0;
- //Slave address bit
- I2C2TRN = 0b01010000;
- while(!IFS3bits.MI2C2IF);
- IFS3bits.MI2C2IF = 0;
- //Register address
- I2C2TRN = reg;
- while(!IFS3bits.MI2C2IF);
- IFS3bits.MI2C2IF = 0;
- //Data
- I2C2TRN = data;
- while(!IFS3bits.MI2C2IF);
- IFS3bits.MI2C2IF = 0;
- //Stop bit
- I2C2CONbits.PEN = 1;
- IFS3bits.MI2C2IF = 0;
- while(I2C2CONbits.PEN);
- }
- unsigned char chipRead(char reg){
- unsigned char msb = 0;
- /*configure i2c to send ACK*/
- I2C2CONbits.ACKDT = 0;
- /*start*/
- I2C2CONbits.SEN = 1;
- while(I2C2CONbits.SEN);
- /*sensor address*/
- I2C2TRN = 0b01010000;
- while(I2C2STATbits.TBF);
- while(I2C2STATbits.TRSTAT);
- while(I2C2STATbits.ACKSTAT);
- /*sensor command*/
- I2C2TRN = 0b11111101;
- while(I2C2STATbits.TBF);
- while(I2C2STATbits.TRSTAT);
- while(I2C2STATbits.ACKSTAT);
- /*repeated start*/
- I2C2CONbits.RSEN = 1;
- while(I2C2CONbits.RSEN);
- /*address for reading*/
- I2C2TRN = reg;
- while(I2C2STATbits.TBF);
- while(I2C2STATbits.TRSTAT);
- while(I2C2STATbits.ACKSTAT);
- /*receiver enabled*/
- I2C2CONbits.RCEN = 1;
- /*read first byte data*/
- while(!I2C2STATbits.RBF);
- msb = I2C2RCV;
- /*configure i2c to send nack*/
- I2C2CONbits.ACKDT = 1;
- /*send nack*/
- I2C2CONbits.ACKEN = 1;
- while(I2C1CONbits.ACKEN);
- /*send stop*/
- I2C2CONbits.PEN = 1;
- while(I2C2CONbits.PEN);
- I2C2CONbits.I2CEN = 0;
- return msb;
- }
- int main(void) {
- initChip();
- char key = 0b00000000;
- chipWrite(0x72,0x00);
- chipWrite(0x74, 0xFF);
- while(1){
- key = chipRead(0xFD);
- asm("nop");
- if(key == 0b01010000){
- asm("nop");
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment