Object Model code with hardware support

Dependencies:   mbed

Committer:
bgrissom
Date:
Fri Sep 05 00:07:44 2014 +0000
Revision:
0:2b4bbe9ea495
Object Model code with Toshiba S0 and S1 routines compiles with ST F401RE board support.  If you try to compile this for the F030 or F072, it will run out of SRAM space.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bgrissom 0:2b4bbe9ea495 1 #include "mbed.h"
bgrissom 0:2b4bbe9ea495 2 #include <stdio.h>
bgrissom 0:2b4bbe9ea495 3 #include "anthem.hpp"
bgrissom 0:2b4bbe9ea495 4 #include "hardware_F072.hpp"
bgrissom 0:2b4bbe9ea495 5
bgrissom 0:2b4bbe9ea495 6 // Definitions
bgrissom 0:2b4bbe9ea495 7 #define PIN_41 PB_5
bgrissom 0:2b4bbe9ea495 8 #define PIN_46 PB_9
bgrissom 0:2b4bbe9ea495 9 #define PIN_32 PA_11
bgrissom 0:2b4bbe9ea495 10 #define PIN_20 PB_2
bgrissom 0:2b4bbe9ea495 11 #define HEX_ONE_THOUSAND (0x03E8)
bgrissom 0:2b4bbe9ea495 12 const int SCLK_ENABLED = 0;
bgrissom 0:2b4bbe9ea495 13
bgrissom 0:2b4bbe9ea495 14 // Forward Declarations
bgrissom 0:2b4bbe9ea495 15 void display_RthenGthenB_for_1_pixel(uint16_t xON, uint16_t yON);
bgrissom 0:2b4bbe9ea495 16 void debug_printf(uint16_t xON, uint16_t yON, int colorRotate);
bgrissom 0:2b4bbe9ea495 17
bgrissom 0:2b4bbe9ea495 18 // Globals
bgrissom 0:2b4bbe9ea495 19 LEDModule g_mod;
bgrissom 0:2b4bbe9ea495 20 DigitalOut ENA(PIN_41);
bgrissom 0:2b4bbe9ea495 21 DigitalOut ENB(PIN_46);
bgrissom 0:2b4bbe9ea495 22 DigitalOut ENC(PIN_32);
bgrissom 0:2b4bbe9ea495 23 DigitalOut EnSclk(PIN_20);
bgrissom 0:2b4bbe9ea495 24
bgrissom 0:2b4bbe9ea495 25
bgrissom 0:2b4bbe9ea495 26 int main (int argc, char *argv[])
bgrissom 0:2b4bbe9ea495 27 {
bgrissom 0:2b4bbe9ea495 28 uint16_t x = 0;
bgrissom 0:2b4bbe9ea495 29 uint16_t y = 0;
bgrissom 0:2b4bbe9ea495 30
bgrissom 0:2b4bbe9ea495 31 ENA = 1;
bgrissom 0:2b4bbe9ea495 32 ENB = 1;
bgrissom 0:2b4bbe9ea495 33 ENC = 1;
bgrissom 0:2b4bbe9ea495 34 EnSclk = SCLK_ENABLED;
bgrissom 0:2b4bbe9ea495 35
bgrissom 0:2b4bbe9ea495 36 // NOTE: 24MHz is half the 48MHz clock rate. The PWM registers
bgrissom 0:2b4bbe9ea495 37 // seem to only allow 24MHz at this point, so I'm matching
bgrissom 0:2b4bbe9ea495 38 // the SPI bus speed to be the same.
bgrissom 0:2b4bbe9ea495 39 //
bgrissom 0:2b4bbe9ea495 40 // 1/24MHz => 1/(24*10^6) => 41.6*10^-9 second period,
bgrissom 0:2b4bbe9ea495 41 // which means 41.6ns period and 20.8ns pulse width at
bgrissom 0:2b4bbe9ea495 42 // 50% duty cycle (which seems to be right for the SPI clock
bgrissom 0:2b4bbe9ea495 43 // line as well as a reasonable choice for the PWM line).
bgrissom 0:2b4bbe9ea495 44
bgrissom 0:2b4bbe9ea495 45 // PWMCLK
bgrissom 0:2b4bbe9ea495 46 pwmout_t outs;
bgrissom 0:2b4bbe9ea495 47 pwmout_init(&outs, PB_4);
bgrissom 0:2b4bbe9ea495 48 pwmout_period_ns(&outs, 2); // 24 MHz (not very clean on the scope)
bgrissom 0:2b4bbe9ea495 49 // pwmout_period_ns(&outs, 40); // 1.2 MHz on the scope
bgrissom 0:2b4bbe9ea495 50 // Very slow! pwmout_period_us(&outs, 2);
bgrissom 0:2b4bbe9ea495 51 pwmout_write(&outs, 0.5f); // Duty cycle 50%
bgrissom 0:2b4bbe9ea495 52
bgrissom 0:2b4bbe9ea495 53
bgrissom 0:2b4bbe9ea495 54 for (y = 0; y < MODULE_WIDTH; y++) {
bgrissom 0:2b4bbe9ea495 55 for (x = 0; x < MODULE_HEIGHT; x++) {
bgrissom 0:2b4bbe9ea495 56 display_RthenGthenB_for_1_pixel(x, y);
bgrissom 0:2b4bbe9ea495 57 }
bgrissom 0:2b4bbe9ea495 58 }
bgrissom 0:2b4bbe9ea495 59
bgrissom 0:2b4bbe9ea495 60 return 0;
bgrissom 0:2b4bbe9ea495 61 }
bgrissom 0:2b4bbe9ea495 62
bgrissom 0:2b4bbe9ea495 63
bgrissom 0:2b4bbe9ea495 64 // This will display 3 "images":
bgrissom 0:2b4bbe9ea495 65 //
bgrissom 0:2b4bbe9ea495 66 // For one pixel location only, it will:
bgrissom 0:2b4bbe9ea495 67 // - Red LED of that pixel ON (all the rest off)
bgrissom 0:2b4bbe9ea495 68 // - Green LED of that pixel ON (all the rest off)
bgrissom 0:2b4bbe9ea495 69 // - Blue LED of that pixel ON (all the rest off)
bgrissom 0:2b4bbe9ea495 70 //
bgrissom 0:2b4bbe9ea495 71 void display_RthenGthenB_for_1_pixel(uint16_t xON, uint16_t yON)
bgrissom 0:2b4bbe9ea495 72 {
bgrissom 0:2b4bbe9ea495 73 PixelColor srcPix;
bgrissom 0:2b4bbe9ea495 74 const uint8_t brightness = 0x07;
bgrissom 0:2b4bbe9ea495 75 int colorRotate = 0; // 0=Red, 1=Green, 2=Blue
bgrissom 0:2b4bbe9ea495 76 uint16_t x = 0;
bgrissom 0:2b4bbe9ea495 77 uint16_t y = 0;
bgrissom 0:2b4bbe9ea495 78
bgrissom 0:2b4bbe9ea495 79 for (colorRotate = 0; colorRotate < 3; colorRotate++) {
bgrissom 0:2b4bbe9ea495 80 debug_printf(xON, yON, colorRotate);
bgrissom 0:2b4bbe9ea495 81 for (y = 0; y < MODULE_WIDTH; y++) {
bgrissom 0:2b4bbe9ea495 82 for (x = 0; x < MODULE_HEIGHT; x++) {
bgrissom 0:2b4bbe9ea495 83 if ( (xON == x) && // Should this pixel be turned on?
bgrissom 0:2b4bbe9ea495 84 (yON == y) )
bgrissom 0:2b4bbe9ea495 85 {
bgrissom 0:2b4bbe9ea495 86 if (colorRotate == 0) {
bgrissom 0:2b4bbe9ea495 87 srcPix._r = brightness;
bgrissom 0:2b4bbe9ea495 88 srcPix._g = 0;
bgrissom 0:2b4bbe9ea495 89 srcPix._b = 0;
bgrissom 0:2b4bbe9ea495 90 } else if (colorRotate == 1) {
bgrissom 0:2b4bbe9ea495 91 srcPix._r = 0;
bgrissom 0:2b4bbe9ea495 92 srcPix._g = brightness;
bgrissom 0:2b4bbe9ea495 93 srcPix._b = 0;
bgrissom 0:2b4bbe9ea495 94 } else if (colorRotate == 2) {
bgrissom 0:2b4bbe9ea495 95 srcPix._r = 0;
bgrissom 0:2b4bbe9ea495 96 srcPix._g = 0;
bgrissom 0:2b4bbe9ea495 97 srcPix._b = brightness;
bgrissom 0:2b4bbe9ea495 98 }
bgrissom 0:2b4bbe9ea495 99 } else {
bgrissom 0:2b4bbe9ea495 100 // This pixel should be turned off
bgrissom 0:2b4bbe9ea495 101 srcPix._r = 0;
bgrissom 0:2b4bbe9ea495 102 srcPix._g = 0;
bgrissom 0:2b4bbe9ea495 103 srcPix._b = 0;
bgrissom 0:2b4bbe9ea495 104 }
bgrissom 0:2b4bbe9ea495 105 g_mod._sourceImage.setPixel(x, y, srcPix);
bgrissom 0:2b4bbe9ea495 106 }
bgrissom 0:2b4bbe9ea495 107 }
bgrissom 0:2b4bbe9ea495 108 g_mod.displayImage();
bgrissom 0:2b4bbe9ea495 109 }
bgrissom 0:2b4bbe9ea495 110 }
bgrissom 0:2b4bbe9ea495 111
bgrissom 0:2b4bbe9ea495 112 void debug_printf(uint16_t x, uint16_t y, int color)
bgrissom 0:2b4bbe9ea495 113 {
bgrissom 0:2b4bbe9ea495 114 if (color == 0) {
bgrissom 0:2b4bbe9ea495 115 BAGINFO3("\nPICTURE RED x[%d] y[%d]", x, y);
bgrissom 0:2b4bbe9ea495 116 } else if (color == 1) {
bgrissom 0:2b4bbe9ea495 117 BAGINFO3("\nPICTURE GREEN x[%d] y[%d]", x, y);
bgrissom 0:2b4bbe9ea495 118 } else if (color == 2) {
bgrissom 0:2b4bbe9ea495 119 BAGINFO3("\nPICTURE BLUE x[%d] y[%d]", x, y);
bgrissom 0:2b4bbe9ea495 120 }
bgrissom 0:2b4bbe9ea495 121 }