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

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }