This is a short program to try to use the mbed to bit-bash a parrallel ttl interface to an LCD panel. The panel is an NEC NL 6448 AC 32-01
main.cpp@0:ea31197a0074, 2011-05-13 (annotated)
- Committer:
- zarquin
- Date:
- Fri May 13 11:22:56 2011 +0000
- Revision:
- 0:ea31197a0074
First release. Doesn\t work yet
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zarquin | 0:ea31197a0074 | 1 | #include "mbed.h" |
zarquin | 0:ea31197a0074 | 2 | |
zarquin | 0:ea31197a0074 | 3 | #include "FastIO.h" |
zarquin | 0:ea31197a0074 | 4 | |
zarquin | 0:ea31197a0074 | 5 | DigitalOut myled(LED1); |
zarquin | 0:ea31197a0074 | 6 | int pixel =0; |
zarquin | 0:ea31197a0074 | 7 | int validRegion = 0; |
zarquin | 0:ea31197a0074 | 8 | // int DE =0; |
zarquin | 0:ea31197a0074 | 9 | // DigitalOut red(p15); P0.23 |
zarquin | 0:ea31197a0074 | 10 | // DigitalOut green(p16); P0.24 |
zarquin | 0:ea31197a0074 | 11 | // DigitalOut blue(p17); P0.25 |
zarquin | 0:ea31197a0074 | 12 | // DigitalOut clk(p11); P0.18 |
zarquin | 0:ea31197a0074 | 13 | // DigitalOut de(p13); P0.15 |
zarquin | 0:ea31197a0074 | 14 | // DigitalOut hsync(p20); p5 P0.9 (these need to be changed to be port 0) |
zarquin | 0:ea31197a0074 | 15 | // DigitalOut vsync(p19); p6 P0.8 |
zarquin | 0:ea31197a0074 | 16 | |
zarquin | 0:ea31197a0074 | 17 | Ticker clockCall; |
zarquin | 0:ea31197a0074 | 18 | |
zarquin | 0:ea31197a0074 | 19 | int hCount = 0; |
zarquin | 0:ea31197a0074 | 20 | int vCount = 0; |
zarquin | 0:ea31197a0074 | 21 | // ints for different pin states. |
zarquin | 0:ea31197a0074 | 22 | uint32_t i_clockPin =0; |
zarquin | 0:ea31197a0074 | 23 | uint32_t i_red = 0; |
zarquin | 0:ea31197a0074 | 24 | uint32_t i_blue = 0; |
zarquin | 0:ea31197a0074 | 25 | uint32_t i_green = 0; |
zarquin | 0:ea31197a0074 | 26 | uint32_t i_de = 0; |
zarquin | 0:ea31197a0074 | 27 | uint32_t i_hsync =0; |
zarquin | 0:ea31197a0074 | 28 | uint32_t i_vsync = 0; |
zarquin | 0:ea31197a0074 | 29 | // need to work out what the mask for a single write is. :/ |
zarquin | 0:ea31197a0074 | 30 | #define PIN_MASK 0xFFFFFFFF |
zarquin | 0:ea31197a0074 | 31 | |
zarquin | 0:ea31197a0074 | 32 | //uint32_t bitMask = 0; |
zarquin | 0:ea31197a0074 | 33 | |
zarquin | 0:ea31197a0074 | 34 | |
zarquin | 0:ea31197a0074 | 35 | |
zarquin | 0:ea31197a0074 | 36 | FastPortOut<Port0, PIN_MASK> DataOutPort; |
zarquin | 0:ea31197a0074 | 37 | uint32_t pinSet =0; |
zarquin | 0:ea31197a0074 | 38 | |
zarquin | 0:ea31197a0074 | 39 | void writePort(){ |
zarquin | 0:ea31197a0074 | 40 | // this function takes all the flags and munges them into a single port write. |
zarquin | 0:ea31197a0074 | 41 | pinSet = 0; |
zarquin | 0:ea31197a0074 | 42 | pinSet = i_clockPin << 18; |
zarquin | 0:ea31197a0074 | 43 | pinSet = pinSet || i_red <<23; |
zarquin | 0:ea31197a0074 | 44 | pinSet = pinSet || i_blue <<25; |
zarquin | 0:ea31197a0074 | 45 | pinSet = pinSet || i_green <<24; |
zarquin | 0:ea31197a0074 | 46 | pinSet = pinSet || i_hsync << 9; |
zarquin | 0:ea31197a0074 | 47 | pinSet = pinSet || i_vsync << 8; |
zarquin | 0:ea31197a0074 | 48 | pinSet = pinSet || i_de << 15; |
zarquin | 0:ea31197a0074 | 49 | |
zarquin | 0:ea31197a0074 | 50 | DataOutPort.write(pinSet); |
zarquin | 0:ea31197a0074 | 51 | } |
zarquin | 0:ea31197a0074 | 52 | |
zarquin | 0:ea31197a0074 | 53 | void scanFrame(){ |
zarquin | 0:ea31197a0074 | 54 | //get called by scanline at the end of each line. |
zarquin | 0:ea31197a0074 | 55 | |
zarquin | 0:ea31197a0074 | 56 | if(vCount>526 ){ |
zarquin | 0:ea31197a0074 | 57 | vCount=0; |
zarquin | 0:ea31197a0074 | 58 | } |
zarquin | 0:ea31197a0074 | 59 | if (vCount < 2 ){ |
zarquin | 0:ea31197a0074 | 60 | i_vsync=0; |
zarquin | 0:ea31197a0074 | 61 | }else{ |
zarquin | 0:ea31197a0074 | 62 | i_vsync=1; |
zarquin | 0:ea31197a0074 | 63 | } |
zarquin | 0:ea31197a0074 | 64 | if(vCount > 33 && vCount < 514){ |
zarquin | 0:ea31197a0074 | 65 | validRegion =1; |
zarquin | 0:ea31197a0074 | 66 | } |
zarquin | 0:ea31197a0074 | 67 | vCount++; |
zarquin | 0:ea31197a0074 | 68 | } |
zarquin | 0:ea31197a0074 | 69 | |
zarquin | 0:ea31197a0074 | 70 | |
zarquin | 0:ea31197a0074 | 71 | void writePixel(){ |
zarquin | 0:ea31197a0074 | 72 | //alternate colours |
zarquin | 0:ea31197a0074 | 73 | i_red=pixel; |
zarquin | 0:ea31197a0074 | 74 | pixel = !pixel; |
zarquin | 0:ea31197a0074 | 75 | } |
zarquin | 0:ea31197a0074 | 76 | |
zarquin | 0:ea31197a0074 | 77 | void scanLine(){ // horizontal scans. this is the most frequent and the inner loop. call this from the clock. |
zarquin | 0:ea31197a0074 | 78 | if(hCount> 800){ |
zarquin | 0:ea31197a0074 | 79 | scanFrame(); |
zarquin | 0:ea31197a0074 | 80 | hCount =0; |
zarquin | 0:ea31197a0074 | 81 | } |
zarquin | 0:ea31197a0074 | 82 | if(hCount < 97){ |
zarquin | 0:ea31197a0074 | 83 | i_hsync=0; |
zarquin | 0:ea31197a0074 | 84 | }else{ |
zarquin | 0:ea31197a0074 | 85 | i_hsync=1; |
zarquin | 0:ea31197a0074 | 86 | } |
zarquin | 0:ea31197a0074 | 87 | if(hCount > 144 && hCount <785 && validRegion ){ |
zarquin | 0:ea31197a0074 | 88 | //output data here |
zarquin | 0:ea31197a0074 | 89 | i_de=1; |
zarquin | 0:ea31197a0074 | 90 | writePixel(); |
zarquin | 0:ea31197a0074 | 91 | } |
zarquin | 0:ea31197a0074 | 92 | else |
zarquin | 0:ea31197a0074 | 93 | { |
zarquin | 0:ea31197a0074 | 94 | i_de=0; |
zarquin | 0:ea31197a0074 | 95 | } |
zarquin | 0:ea31197a0074 | 96 | hCount++; |
zarquin | 0:ea31197a0074 | 97 | } |
zarquin | 0:ea31197a0074 | 98 | |
zarquin | 0:ea31197a0074 | 99 | |
zarquin | 0:ea31197a0074 | 100 | |
zarquin | 0:ea31197a0074 | 101 | void clkPin(){ |
zarquin | 0:ea31197a0074 | 102 | i_clockPin = !i_clockPin; |
zarquin | 0:ea31197a0074 | 103 | if(i_clockPin){// when clock pin is high, calculate all the values |
zarquin | 0:ea31197a0074 | 104 | scanLine(); |
zarquin | 0:ea31197a0074 | 105 | } |
zarquin | 0:ea31197a0074 | 106 | writePort();// update the pin status |
zarquin | 0:ea31197a0074 | 107 | |
zarquin | 0:ea31197a0074 | 108 | } |
zarquin | 0:ea31197a0074 | 109 | |
zarquin | 0:ea31197a0074 | 110 | int main() { |
zarquin | 0:ea31197a0074 | 111 | |
zarquin | 0:ea31197a0074 | 112 | //initialisation |
zarquin | 0:ea31197a0074 | 113 | //setup timers |
zarquin | 0:ea31197a0074 | 114 | //setup pins |
zarquin | 0:ea31197a0074 | 115 | //start loop |
zarquin | 0:ea31197a0074 | 116 | // setup timer for 500kHz Call. |
zarquin | 0:ea31197a0074 | 117 | clockCall.attach_us(&clkPin, 1); |
zarquin | 0:ea31197a0074 | 118 | myled =1; |
zarquin | 0:ea31197a0074 | 119 | while(1){ |
zarquin | 0:ea31197a0074 | 120 | //do SFA. |
zarquin | 0:ea31197a0074 | 121 | myled = !myled; |
zarquin | 0:ea31197a0074 | 122 | wait(0.2); // does this block everything? should probably check this |
zarquin | 0:ea31197a0074 | 123 | } |
zarquin | 0:ea31197a0074 | 124 | |
zarquin | 0:ea31197a0074 | 125 | } |