Collections of BERTL libraries

Committer:
DongExpander
Date:
Mon Apr 18 10:07:53 2016 +0000
Revision:
1:b924729b5734
Feature; Added Libraries by Prof. Hollegha for PortEx (starting with 'hl_')

Who changed what in which revision?

UserRevisionLine numberNew contents of line
DongExpander 1:b924729b5734 1 #include "mbed.h"
DongExpander 1:b924729b5734 2 #include "hl_bertl_portex.h"
DongExpander 1:b924729b5734 3
DongExpander 1:b924729b5734 4 PortEx::PortEx() :
DongExpander 1:b924729b5734 5 _i2c(p28,p27), _p6Event(p6)
DongExpander 1:b924729b5734 6 {
DongExpander 1:b924729b5734 7 btns=btnEvent=0;
DongExpander 1:b924729b5734 8 useISR = 1;
DongExpander 1:b924729b5734 9 }
DongExpander 1:b924729b5734 10
DongExpander 1:b924729b5734 11 void PortEx::Init()
DongExpander 1:b924729b5734 12 {
DongExpander 1:b924729b5734 13 char cmd[4];
DongExpander 1:b924729b5734 14 _i2c.frequency(100000);
DongExpander 1:b924729b5734 15 wait(0.01);
DongExpander 1:b924729b5734 16 // Port0 Config Port0 Out Port1 In
DongExpander 1:b924729b5734 17 cmd[0]=0x06;
DongExpander 1:b924729b5734 18 cmd[1]=0x00;
DongExpander 1:b924729b5734 19 cmd[2]=0xFF;
DongExpander 1:b924729b5734 20 _i2c.write(DEV, cmd, 3, false);
DongExpander 1:b924729b5734 21 SetLedPort(0);
DongExpander 1:b924729b5734 22 _p6Event.fall(this, &PortEx::p6ISR);
DongExpander 1:b924729b5734 23 }
DongExpander 1:b924729b5734 24
DongExpander 1:b924729b5734 25 void PortEx::p6ISR()
DongExpander 1:b924729b5734 26 {
DongExpander 1:b924729b5734 27 if( !useISR )
DongExpander 1:b924729b5734 28 return;
DongExpander 1:b924729b5734 29 int16_t prev = btns;
DongExpander 1:b924729b5734 30 ReadButtons();
DongExpander 1:b924729b5734 31 if( !btns )
DongExpander 1:b924729b5734 32 btns = prev;
DongExpander 1:b924729b5734 33 else
DongExpander 1:b924729b5734 34 btnEvent = 1;
DongExpander 1:b924729b5734 35 }
DongExpander 1:b924729b5734 36
DongExpander 1:b924729b5734 37 void PortEx::SetLedPort(uint8_t aBitPattern)
DongExpander 1:b924729b5734 38 {
DongExpander 1:b924729b5734 39 char cmd[4];
DongExpander 1:b924729b5734 40 cmd[0]=2;
DongExpander 1:b924729b5734 41 cmd[1]=~aBitPattern;
DongExpander 1:b924729b5734 42 _i2c.write(DEV, cmd, 2, false);
DongExpander 1:b924729b5734 43 }
DongExpander 1:b924729b5734 44
DongExpander 1:b924729b5734 45 void PortEx::SetLeds(uint8_t aBitPattern)
DongExpander 1:b924729b5734 46 {
DongExpander 1:b924729b5734 47 _currLeds |= aBitPattern;
DongExpander 1:b924729b5734 48 SetLedPort(_currLeds);
DongExpander 1:b924729b5734 49 }
DongExpander 1:b924729b5734 50
DongExpander 1:b924729b5734 51 void PortEx::ToggleLeds(uint8_t aBitPattern)
DongExpander 1:b924729b5734 52 {
DongExpander 1:b924729b5734 53 _currLeds ^= aBitPattern;
DongExpander 1:b924729b5734 54 SetLedPort(_currLeds);
DongExpander 1:b924729b5734 55 }
DongExpander 1:b924729b5734 56
DongExpander 1:b924729b5734 57 void PortEx::ClearLeds()
DongExpander 1:b924729b5734 58 {
DongExpander 1:b924729b5734 59 _currLeds=0;
DongExpander 1:b924729b5734 60 SetLedPort(0);
DongExpander 1:b924729b5734 61 }
DongExpander 1:b924729b5734 62
DongExpander 1:b924729b5734 63
DongExpander 1:b924729b5734 64 void PortEx::ReadButtons()
DongExpander 1:b924729b5734 65 {
DongExpander 1:b924729b5734 66 char cmd[4];
DongExpander 1:b924729b5734 67 cmd[0]=1;
DongExpander 1:b924729b5734 68 _i2c.write(DEV, cmd, 1, true);
DongExpander 1:b924729b5734 69 _i2c.read(DEV|1, cmd, 1, false);
DongExpander 1:b924729b5734 70 btns = cmd[0];
DongExpander 1:b924729b5734 71 }
DongExpander 1:b924729b5734 72
DongExpander 1:b924729b5734 73 void PortEx::WaitUntilButtonPressed()
DongExpander 1:b924729b5734 74 {
DongExpander 1:b924729b5734 75 int prev = useISR;
DongExpander 1:b924729b5734 76 useISR = 0;
DongExpander 1:b924729b5734 77 btns = 0;
DongExpander 1:b924729b5734 78 while(1) {
DongExpander 1:b924729b5734 79 ReadButtons();
DongExpander 1:b924729b5734 80 if( btns )
DongExpander 1:b924729b5734 81 break;
DongExpander 1:b924729b5734 82 wait(0.01);
DongExpander 1:b924729b5734 83 }
DongExpander 1:b924729b5734 84 btns=btnEvent=0;
DongExpander 1:b924729b5734 85 useISR = prev;
DongExpander 1:b924729b5734 86 }
DongExpander 1:b924729b5734 87
DongExpander 1:b924729b5734 88 void PortEx::WaitUntilFrontButtonPressed()
DongExpander 1:b924729b5734 89 {
DongExpander 1:b924729b5734 90 int prev = useISR;
DongExpander 1:b924729b5734 91 useISR = 0;
DongExpander 1:b924729b5734 92 btns = 0;
DongExpander 1:b924729b5734 93 while(1) {
DongExpander 1:b924729b5734 94 ReadButtons();
DongExpander 1:b924729b5734 95 if( IsAnyFrontButton() )
DongExpander 1:b924729b5734 96 break;
DongExpander 1:b924729b5734 97 wait(0.01);
DongExpander 1:b924729b5734 98 }
DongExpander 1:b924729b5734 99 btns=btnEvent=0;
DongExpander 1:b924729b5734 100 useISR = prev;
DongExpander 1:b924729b5734 101 }
DongExpander 1:b924729b5734 102