Complete

Dependencies:   mbed

Committer:
mikeb
Date:
Sat Jan 30 02:29:20 2016 +0000
Revision:
1:c5bc18044085
Parent:
0:8f5b2af5e1d5
Child:
2:029b0a855b82
Working version with OPCODES 7 and 6 (Parts 1, 2, 3)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mikeb 0:8f5b2af5e1d5 1 /**
mikeb 0:8f5b2af5e1d5 2 * This program reads in the state of the external DIP switch
mikeb 0:8f5b2af5e1d5 3 * and outputs it to the LED using the MCP23S17 I/O expander chip
mikeb 0:8f5b2af5e1d5 4 *
mikeb 0:8f5b2af5e1d5 5 * @author(s): Gedeon Nyengele & Mike Bossi
mikeb 0:8f5b2af5e1d5 6 * @date: 01/29/2016
mikeb 0:8f5b2af5e1d5 7 */
mikeb 0:8f5b2af5e1d5 8 #include "mbed.h"
mikeb 0:8f5b2af5e1d5 9 #include "wdt.h"
mikeb 0:8f5b2af5e1d5 10 #include "MCP23S17.h"
mikeb 0:8f5b2af5e1d5 11
mikeb 0:8f5b2af5e1d5 12
mikeb 0:8f5b2af5e1d5 13
mikeb 0:8f5b2af5e1d5 14 DigitalOut LED_1(p21);
mikeb 0:8f5b2af5e1d5 15 PwmOut LED_2(p22);
mikeb 0:8f5b2af5e1d5 16 DigitalIn switch1(p23);
mikeb 0:8f5b2af5e1d5 17 DigitalIn switch2(p24);
mikeb 0:8f5b2af5e1d5 18 DigitalIn switch3(p25);
mikeb 0:8f5b2af5e1d5 19 DigitalIn switch4(p26);
mikeb 0:8f5b2af5e1d5 20
mikeb 0:8f5b2af5e1d5 21 // Create an SPI bus
mikeb 0:8f5b2af5e1d5 22 SPI spi(p5, p6, p7);
mikeb 0:8f5b2af5e1d5 23
mikeb 0:8f5b2af5e1d5 24 // Device opcode, as defined in datasheet
mikeb 0:8f5b2af5e1d5 25
mikeb 0:8f5b2af5e1d5 26
mikeb 0:8f5b2af5e1d5 27 // Read switch state and show state on LED
mikeb 0:8f5b2af5e1d5 28 // Assumption: Switch connected to GPB0 (MCP23S17 pin 1)
mikeb 0:8f5b2af5e1d5 29 // LED connected to GPA0 (MCP23S17 pin 21)
mikeb 0:8f5b2af5e1d5 30
mikeb 0:8f5b2af5e1d5 31 Watchdog wdt;
mikeb 0:8f5b2af5e1d5 32 BusIn _pins(p28, p29, p30);
mikeb 0:8f5b2af5e1d5 33
mikeb 0:8f5b2af5e1d5 34 int main()
mikeb 0:8f5b2af5e1d5 35 {
mikeb 0:8f5b2af5e1d5 36
mikeb 0:8f5b2af5e1d5 37 _pins.mode(PullUp);
mikeb 0:8f5b2af5e1d5 38
mikeb 0:8f5b2af5e1d5 39
mikeb 0:8f5b2af5e1d5 40 char Opcode = 0x40;
mikeb 0:8f5b2af5e1d5 41
mikeb 0:8f5b2af5e1d5 42 MCP23S17 chip(spi, p20, Opcode);
mikeb 0:8f5b2af5e1d5 43
mikeb 0:8f5b2af5e1d5 44 // Set PORT_A pins to be output pins
mikeb 0:8f5b2af5e1d5 45 chip.direction(PORT_A, 0x00);
mikeb 0:8f5b2af5e1d5 46
mikeb 0:8f5b2af5e1d5 47 // Set PORT_B pins to be input pins
mikeb 0:8f5b2af5e1d5 48 chip.direction(PORT_B, 0xFF);
mikeb 0:8f5b2af5e1d5 49 wdt.kick(5.0);
mikeb 0:8f5b2af5e1d5 50 int switch_1 = 0;
mikeb 0:8f5b2af5e1d5 51 int switch_2 = 0;
mikeb 0:8f5b2af5e1d5 52 int switch_3 = 0;
mikeb 0:8f5b2af5e1d5 53
mikeb 0:8f5b2af5e1d5 54 // int switch_4 = 0;
mikeb 0:8f5b2af5e1d5 55 short lockUpCount = 0;
mikeb 0:8f5b2af5e1d5 56
mikeb 0:8f5b2af5e1d5 57 switch3.mode(PullUp);
mikeb 0:8f5b2af5e1d5 58 switch4.mode(PullUp);
mikeb 0:8f5b2af5e1d5 59 // Delay for initial pullup to take effect
mikeb 0:8f5b2af5e1d5 60 wait(.25);
mikeb 0:8f5b2af5e1d5 61 // Setup Interrupt callback functions for a pb hit
mikeb 0:8f5b2af5e1d5 62
mikeb 0:8f5b2af5e1d5 63 while(1){
mikeb 0:8f5b2af5e1d5 64
mikeb 0:8f5b2af5e1d5 65
mikeb 0:8f5b2af5e1d5 66 wdt.kick();
mikeb 0:8f5b2af5e1d5 67
mikeb 0:8f5b2af5e1d5 68 if(!switch4){
mikeb 0:8f5b2af5e1d5 69 lockUpCount++;
mikeb 0:8f5b2af5e1d5 70 if (lockUpCount > 100)
mikeb 0:8f5b2af5e1d5 71 while(1) {}
mikeb 0:8f5b2af5e1d5 72 }
mikeb 1:c5bc18044085 73
mikeb 1:c5bc18044085 74
mikeb 0:8f5b2af5e1d5 75 switch (_pins){
mikeb 1:c5bc18044085 76 case 0x7:
mikeb 0:8f5b2af5e1d5 77 if(!switch1)
mikeb 1:c5bc18044085 78 LED_1 = 1;
mikeb 1:c5bc18044085 79 else
mikeb 1:c5bc18044085 80 LED_1 = 0;
mikeb 0:8f5b2af5e1d5 81
mikeb 1:c5bc18044085 82 switch_1 = switch1.read();
mikeb 1:c5bc18044085 83 switch_2 = switch2.read();
mikeb 1:c5bc18044085 84 switch_3 = switch3.read();
mikeb 0:8f5b2af5e1d5 85
mikeb 1:c5bc18044085 86 LED_2 = !switch_1*0.25 + !switch_2 * 0.40 + !switch_3*0.35;
mikeb 1:c5bc18044085 87 break;
mikeb 0:8f5b2af5e1d5 88
mikeb 1:c5bc18044085 89 case 0x6:
mikeb 1:c5bc18044085 90 chip.write(PORT_A, chip.read(PORT_B) & 0x01);
mikeb 1:c5bc18044085 91 break;
mikeb 1:c5bc18044085 92
mikeb 1:c5bc18044085 93 case 0x5:
mikeb 1:c5bc18044085 94
mikeb 1:c5bc18044085 95 break;
mikeb 0:8f5b2af5e1d5 96
mikeb 0:8f5b2af5e1d5 97 }
mikeb 0:8f5b2af5e1d5 98
mikeb 0:8f5b2af5e1d5 99
mikeb 0:8f5b2af5e1d5 100 }
mikeb 0:8f5b2af5e1d5 101
mikeb 0:8f5b2af5e1d5 102 }
mikeb 0:8f5b2af5e1d5 103