Subversion Repositories Code-Repo

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
260 Kevin 1
#include "defines.h"
2
#include "MCP23009.h"
3
#include "I2C2.h"
4
 
5
 
6
void MCP23009_Init(void) {
7
    uint8_t buffer[8];
8
 
9
    buffer[0] = 0x00;   // Starting register address
10
    buffer[1] = 0xFF;   // Set all pins as inputs
11
    buffer[2] = 0xFF;   // Reported values are inverted
12
    buffer[3] = 0x00;   // Disable interrupt-on-change
13
    buffer[4] = 0x00;   // IOC default values
14
    buffer[5] = 0x00;   // IOC compare to previous pin value
15
    buffer[6] = 0x00;   // Config settings
16
    buffer[7] = 0xFF;   // Enable pull-ups on all pins
17
 
18
    I2C2_Master_Send(MCP23009_ADDR, 8, buffer);
19
    uint8_t result;
20
    do {
21
        result = I2C2_Get_Status();
22
    } while (!result);
23
}
24
 
270 Kevin 25
void MCP23009_Query(BTN_STATUS *status) {
260 Kevin 26
    uint8_t buffer[2] = {MCP23009_GPIOA};
27
 
28
    I2C2_Master_Send(MCP23009_ADDR, 1, buffer);
29
    uint8_t result;
30
    do {
31
        result = I2C2_Get_Status();
32
    } while (!result);
33
 
34
    I2C2_Master_Recv(MCP23009_ADDR, 1);
35
    uint8_t result;
36
    do {
37
        result = I2C2_Get_Status();
38
    } while (!result);
39
    I2C2_Read_Buffer(buffer);
40
 
270 Kevin 41
    status->w = buffer[0];
260 Kevin 42
}