test

Dependencies:   mbed BufferedSerial LS7366LIB2 FastPWM

Committer:
lsh2205
Date:
Thu Apr 23 00:38:16 2020 +0000
Revision:
0:e12eb40b9fef
test;

Who changed what in which revision?

UserRevisionLine numberNew 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