test
Dependencies: mbed BufferedSerial LS7366LIB2 FastPWM
MCP23S17.h@0:e12eb40b9fef, 2020-04-23 (annotated)
- Committer:
- lsh2205
- Date:
- Thu Apr 23 00:38:16 2020 +0000
- Revision:
- 0:e12eb40b9fef
test;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
lsh2205 | 0:e12eb40b9fef | 1 | #ifndef _MCP23S17_H_ |
lsh2205 | 0:e12eb40b9fef | 2 | #define _MCP23S17_H_ |
lsh2205 | 0:e12eb40b9fef | 3 | |
lsh2205 | 0:e12eb40b9fef | 4 | #include "spi_setup.h" |
lsh2205 | 0:e12eb40b9fef | 5 | |
lsh2205 | 0:e12eb40b9fef | 6 | #define MCP_GPPUA 0x0C // PULL_UP Port A |
lsh2205 | 0:e12eb40b9fef | 7 | #define MCP_GPPUB 0x0D // PULL_UP Port B |
lsh2205 | 0:e12eb40b9fef | 8 | |
lsh2205 | 0:e12eb40b9fef | 9 | #define MCP_IODIRA 0x00 // DIR Port A |
lsh2205 | 0:e12eb40b9fef | 10 | #define MCP_IODIRB 0x01 // DIR Port B |
lsh2205 | 0:e12eb40b9fef | 11 | #define MCP_GPPUA 0x0C // Pull up Port A |
lsh2205 | 0:e12eb40b9fef | 12 | #define MCP_GPPUB 0x0D // Pull up Port B |
lsh2205 | 0:e12eb40b9fef | 13 | #define MCP_GPIOA 0x12 // Address Port A |
lsh2205 | 0:e12eb40b9fef | 14 | #define MCP_GPIOB 0x13 // Address Port B |
lsh2205 | 0:e12eb40b9fef | 15 | #define MCP_WRITE_BYTE 0x40 |
lsh2205 | 0:e12eb40b9fef | 16 | #define MCP_READ_BYTE 0x41 |
lsh2205 | 0:e12eb40b9fef | 17 | |
lsh2205 | 0:e12eb40b9fef | 18 | #define MCP_SEG_CS (uint8_t)0 |
lsh2205 | 0:e12eb40b9fef | 19 | #define MCP_BTN1_CS (uint8_t)1 |
lsh2205 | 0:e12eb40b9fef | 20 | #define MCP_BTN2_CS (uint8_t)2 |
lsh2205 | 0:e12eb40b9fef | 21 | |
lsh2205 | 0:e12eb40b9fef | 22 | void MCP23S17_Init(); |
lsh2205 | 0:e12eb40b9fef | 23 | void MCP_Write(uint8_t cs_select, uint8_t reg_addr, uint8_t data); |
lsh2205 | 0:e12eb40b9fef | 24 | uint8_t MCP_Read(uint8_t cs_select, uint8_t reg_addr); |
lsh2205 | 0:e12eb40b9fef | 25 | |
lsh2205 | 0:e12eb40b9fef | 26 | void MCP23S17_Init() |
lsh2205 | 0:e12eb40b9fef | 27 | { |
lsh2205 | 0:e12eb40b9fef | 28 | MCP_Write(MCP_SEG_CS, MCP_IODIRA, 0x00); //GPIOA as output A |
lsh2205 | 0:e12eb40b9fef | 29 | MCP_Write(MCP_SEG_CS, MCP_IODIRB, 0x00); //GPIOB as output B |
lsh2205 | 0:e12eb40b9fef | 30 | |
lsh2205 | 0:e12eb40b9fef | 31 | MCP_Write(MCP_BTN1_CS, MCP_IODIRA, 0xff); //GPIOA as input A |
lsh2205 | 0:e12eb40b9fef | 32 | MCP_Write(MCP_BTN1_CS, MCP_IODIRB, 0xff); //GPIOB as input B |
lsh2205 | 0:e12eb40b9fef | 33 | |
lsh2205 | 0:e12eb40b9fef | 34 | MCP_Write(MCP_BTN2_CS, MCP_IODIRA, 0xff); //GPIOA as input A |
lsh2205 | 0:e12eb40b9fef | 35 | MCP_Write(MCP_BTN2_CS, MCP_IODIRB, 0xff); //GPIOB as input B |
lsh2205 | 0:e12eb40b9fef | 36 | |
lsh2205 | 0:e12eb40b9fef | 37 | MCP_Write(MCP_BTN2_CS, MCP_GPPUB, 0xff); //GPIOB as input B |
lsh2205 | 0:e12eb40b9fef | 38 | } |
lsh2205 | 0:e12eb40b9fef | 39 | |
lsh2205 | 0:e12eb40b9fef | 40 | void MCP_Write(uint8_t cs_select, uint8_t reg_addr, uint8_t data) |
lsh2205 | 0:e12eb40b9fef | 41 | { |
lsh2205 | 0:e12eb40b9fef | 42 | if(cs_select == MCP_SEG_CS) seg_cs = 1; |
lsh2205 | 0:e12eb40b9fef | 43 | else if(cs_select == MCP_BTN1_CS) btn1_cs = 1; |
lsh2205 | 0:e12eb40b9fef | 44 | else if(cs_select == MCP_BTN2_CS) btn2_cs = 1; |
lsh2205 | 0:e12eb40b9fef | 45 | |
lsh2205 | 0:e12eb40b9fef | 46 | spi1.write(MCP_WRITE_BYTE); |
lsh2205 | 0:e12eb40b9fef | 47 | spi1.write(reg_addr); |
lsh2205 | 0:e12eb40b9fef | 48 | spi1.write(data); |
lsh2205 | 0:e12eb40b9fef | 49 | |
lsh2205 | 0:e12eb40b9fef | 50 | if(cs_select == MCP_SEG_CS) seg_cs = 0; |
lsh2205 | 0:e12eb40b9fef | 51 | else if(cs_select == MCP_BTN1_CS) btn1_cs = 0; |
lsh2205 | 0:e12eb40b9fef | 52 | else if(cs_select == MCP_BTN2_CS) btn2_cs = 0; |
lsh2205 | 0:e12eb40b9fef | 53 | } |
lsh2205 | 0:e12eb40b9fef | 54 | |
lsh2205 | 0:e12eb40b9fef | 55 | uint8_t MCP_Read(uint8_t cs_select, uint8_t reg_addr) |
lsh2205 | 0:e12eb40b9fef | 56 | { |
lsh2205 | 0:e12eb40b9fef | 57 | uint8_t receive_data = 0; |
lsh2205 | 0:e12eb40b9fef | 58 | |
lsh2205 | 0:e12eb40b9fef | 59 | if(cs_select == MCP_SEG_CS) seg_cs = 1; |
lsh2205 | 0:e12eb40b9fef | 60 | else if(cs_select == MCP_BTN1_CS) btn1_cs = 1; |
lsh2205 | 0:e12eb40b9fef | 61 | else if(cs_select == MCP_BTN2_CS) btn2_cs = 1; |
lsh2205 | 0:e12eb40b9fef | 62 | |
lsh2205 | 0:e12eb40b9fef | 63 | spi1.write(MCP_READ_BYTE); |
lsh2205 | 0:e12eb40b9fef | 64 | spi1.write(reg_addr); |
lsh2205 | 0:e12eb40b9fef | 65 | receive_data = spi1.write(0x00); |
lsh2205 | 0:e12eb40b9fef | 66 | |
lsh2205 | 0:e12eb40b9fef | 67 | if(cs_select == MCP_SEG_CS) seg_cs = 0; |
lsh2205 | 0:e12eb40b9fef | 68 | else if(cs_select == MCP_BTN1_CS) btn1_cs = 0; |
lsh2205 | 0:e12eb40b9fef | 69 | else if(cs_select == MCP_BTN2_CS) btn2_cs = 0; |
lsh2205 | 0:e12eb40b9fef | 70 | |
lsh2205 | 0:e12eb40b9fef | 71 | return receive_data; |
lsh2205 | 0:e12eb40b9fef | 72 | } |
lsh2205 | 0:e12eb40b9fef | 73 | |
lsh2205 | 0:e12eb40b9fef | 74 | |
lsh2205 | 0:e12eb40b9fef | 75 | #endif |