Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
main.cpp@0:e8be38c50b44, 2016-01-06 (annotated)
- Committer:
- eencae
- Date:
- Wed Jan 06 12:08:57 2016 +0000
- Revision:
- 0:e8be38c50b44
- Child:
- 1:81b129bec569
Initial commit.
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| eencae | 0:e8be38c50b44 | 1 | /* |
| eencae | 0:e8be38c50b44 | 2 | |
| eencae | 0:e8be38c50b44 | 3 | 2645_Ticker |
| eencae | 0:e8be38c50b44 | 4 | |
| eencae | 0:e8be38c50b44 | 5 | Sample code from ELEC2645 Week 16 Lab |
| eencae | 0:e8be38c50b44 | 6 | |
| eencae | 0:e8be38c50b44 | 7 | Demonstrates how to implement a simple FSM counter |
| eencae | 0:e8be38c50b44 | 8 | |
| eencae | 0:e8be38c50b44 | 9 | (c) Craig A. Evans, University of Leeds, Jan 2016 |
| eencae | 0:e8be38c50b44 | 10 | |
| eencae | 0:e8be38c50b44 | 11 | */ |
| eencae | 0:e8be38c50b44 | 12 | |
| eencae | 0:e8be38c50b44 | 13 | #include "mbed.h" |
| eencae | 0:e8be38c50b44 | 14 | |
| eencae | 0:e8be38c50b44 | 15 | // K64F on-board LEDs |
| eencae | 0:e8be38c50b44 | 16 | DigitalOut r_led(LED_RED); |
| eencae | 0:e8be38c50b44 | 17 | DigitalOut g_led(LED_GREEN); |
| eencae | 0:e8be38c50b44 | 18 | DigitalOut b_led(LED_BLUE); |
| eencae | 0:e8be38c50b44 | 19 | // K64F on-board switches |
| eencae | 0:e8be38c50b44 | 20 | InterruptIn sw2(SW2); |
| eencae | 0:e8be38c50b44 | 21 | InterruptIn sw3(SW3); |
| eencae | 0:e8be38c50b44 | 22 | |
| eencae | 0:e8be38c50b44 | 23 | // LEDs to display counter output |
| eencae | 0:e8be38c50b44 | 24 | // connect up external LEDs to these pins with appropriate current-limiting resistor |
| eencae | 0:e8be38c50b44 | 25 | BusOut output(PTB2,PTB3,PTB10,PTB11); |
| eencae | 0:e8be38c50b44 | 26 | |
| eencae | 0:e8be38c50b44 | 27 | // array of states in the FSM, each element is the output of the counter |
| eencae | 0:e8be38c50b44 | 28 | int fsm[4] = {1,2,4,8}; |
| eencae | 0:e8be38c50b44 | 29 | |
| eencae | 0:e8be38c50b44 | 30 | // function prototypes |
| eencae | 0:e8be38c50b44 | 31 | // error function hangs flashing an LED |
| eencae | 0:e8be38c50b44 | 32 | void error(); |
| eencae | 0:e8be38c50b44 | 33 | // set-up the on-board LEDs and switches |
| eencae | 0:e8be38c50b44 | 34 | void init_K64F(); |
| eencae | 0:e8be38c50b44 | 35 | |
| eencae | 0:e8be38c50b44 | 36 | int main() |
| eencae | 0:e8be38c50b44 | 37 | { |
| eencae | 0:e8be38c50b44 | 38 | init_K64F(); |
| eencae | 0:e8be38c50b44 | 39 | // set inital state |
| eencae | 0:e8be38c50b44 | 40 | int state = 0; |
| eencae | 0:e8be38c50b44 | 41 | |
| eencae | 0:e8be38c50b44 | 42 | while(1) { // loop forever |
| eencae | 0:e8be38c50b44 | 43 | |
| eencae | 0:e8be38c50b44 | 44 | output = fsm[state]; // output current state |
| eencae | 0:e8be38c50b44 | 45 | |
| eencae | 0:e8be38c50b44 | 46 | // check which state we are in and see which the next state should be |
| eencae | 0:e8be38c50b44 | 47 | switch(state) { |
| eencae | 0:e8be38c50b44 | 48 | case 0: |
| eencae | 0:e8be38c50b44 | 49 | state = 1; |
| eencae | 0:e8be38c50b44 | 50 | break; |
| eencae | 0:e8be38c50b44 | 51 | case 1: |
| eencae | 0:e8be38c50b44 | 52 | state = 2; |
| eencae | 0:e8be38c50b44 | 53 | break; |
| eencae | 0:e8be38c50b44 | 54 | case 2: |
| eencae | 0:e8be38c50b44 | 55 | state = 3; |
| eencae | 0:e8be38c50b44 | 56 | break; |
| eencae | 0:e8be38c50b44 | 57 | case 3: |
| eencae | 0:e8be38c50b44 | 58 | state = 0; |
| eencae | 0:e8be38c50b44 | 59 | break; |
| eencae | 0:e8be38c50b44 | 60 | default: |
| eencae | 0:e8be38c50b44 | 61 | error(); //invalid state - call error routine |
| eencae | 0:e8be38c50b44 | 62 | // or could jump to starting state i.e. state = 0 |
| eencae | 0:e8be38c50b44 | 63 | break; |
| eencae | 0:e8be38c50b44 | 64 | } |
| eencae | 0:e8be38c50b44 | 65 | |
| eencae | 0:e8be38c50b44 | 66 | wait(0.2); // small delay |
| eencae | 0:e8be38c50b44 | 67 | |
| eencae | 0:e8be38c50b44 | 68 | } |
| eencae | 0:e8be38c50b44 | 69 | } |
| eencae | 0:e8be38c50b44 | 70 | |
| eencae | 0:e8be38c50b44 | 71 | void init_K64F() |
| eencae | 0:e8be38c50b44 | 72 | { |
| eencae | 0:e8be38c50b44 | 73 | // on-board LEDs are active-low, so set pin high to turn them off. |
| eencae | 0:e8be38c50b44 | 74 | r_led = 1; |
| eencae | 0:e8be38c50b44 | 75 | g_led = 1; |
| eencae | 0:e8be38c50b44 | 76 | b_led = 1; |
| eencae | 0:e8be38c50b44 | 77 | |
| eencae | 0:e8be38c50b44 | 78 | // since the on-board switches have external pull-ups, we should disable the internal pull-down |
| eencae | 0:e8be38c50b44 | 79 | // resistors that are enabled by default using InterruptIn |
| eencae | 0:e8be38c50b44 | 80 | sw2.mode(PullNone); |
| eencae | 0:e8be38c50b44 | 81 | sw3.mode(PullNone); |
| eencae | 0:e8be38c50b44 | 82 | |
| eencae | 0:e8be38c50b44 | 83 | } |
| eencae | 0:e8be38c50b44 | 84 | |
| eencae | 0:e8be38c50b44 | 85 | void error() |
| eencae | 0:e8be38c50b44 | 86 | { |
| eencae | 0:e8be38c50b44 | 87 | while(1) { // if error, hang while flashing error message |
| eencae | 0:e8be38c50b44 | 88 | r_led = 0; |
| eencae | 0:e8be38c50b44 | 89 | wait(0.2); |
| eencae | 0:e8be38c50b44 | 90 | r_led = 1; |
| eencae | 0:e8be38c50b44 | 91 | wait(0.2); |
| eencae | 0:e8be38c50b44 | 92 | } |
| eencae | 0:e8be38c50b44 | 93 | } |