Dependencies:   mbed

Committer:
faruq
Date:
Mon Aug 23 14:36:14 2010 +0000
Revision:
2:46adf929a2ba
Parent:
1:ba08ad32bb88
Child:
3:599209bd1270

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
faruq 0:869f2c6f960d 1 #include "mbed.h"
faruq 0:869f2c6f960d 2 #include "MAX7456.h"
faruq 0:869f2c6f960d 3
faruq 0:869f2c6f960d 4 namespace mbed {
faruq 0:869f2c6f960d 5
faruq 0:869f2c6f960d 6
faruq 0:869f2c6f960d 7
faruq 0:869f2c6f960d 8 MAX7456::MAX7456(PinName mosi, PinName miso, PinName clk, PinName ncs, PinName nrst, const char* name)
faruq 0:869f2c6f960d 9 : Stream(name), _spi(mosi, miso, clk), _ncs(ncs),_nrst(nrst) {
faruq 0:869f2c6f960d 10
faruq 0:869f2c6f960d 11 // initialisation code here
faruq 0:869f2c6f960d 12
faruq 0:869f2c6f960d 13 _nrst = 0;
faruq 0:869f2c6f960d 14 wait (0.5);
faruq 0:869f2c6f960d 15 _nrst = 1;
faruq 0:869f2c6f960d 16 wait (0.5);
faruq 0:869f2c6f960d 17
faruq 0:869f2c6f960d 18 // Setup the spi for 8 bit data, high steady state clock,
faruq 0:869f2c6f960d 19 // second edge capture
faruq 0:869f2c6f960d 20 _spi.format(8,0);
faruq 0:869f2c6f960d 21
faruq 0:869f2c6f960d 22 // 1MHz clock
faruq 0:869f2c6f960d 23 _spi.frequency(1000000);
faruq 0:869f2c6f960d 24 }
faruq 0:869f2c6f960d 25
faruq 0:869f2c6f960d 26
faruq 0:869f2c6f960d 27 void MAX7456::cls() {
faruq 0:869f2c6f960d 28 int tmp=0;
faruq 0:869f2c6f960d 29 tmp = _read(DMM);
faruq 0:869f2c6f960d 30 tmp &= 0xFB;
faruq 0:869f2c6f960d 31 _write(DMM,tmp); //Make sure that DMM[2]=0 so that there can be write operations
faruq 0:869f2c6f960d 32
faruq 0:869f2c6f960d 33 tmp = _read(DMM);
faruq 0:869f2c6f960d 34 tmp |= 0x04;
faruq 0:869f2c6f960d 35 _write (DMM,tmp); //set DMM[2]=1 to clear all locations
faruq 0:869f2c6f960d 36
faruq 0:869f2c6f960d 37 // should wait until DMM[2] goes back to zero, so we know the reset it finished
faruq 0:869f2c6f960d 38
faruq 0:869f2c6f960d 39 }
faruq 0:869f2c6f960d 40
faruq 0:869f2c6f960d 41
faruq 1:ba08ad32bb88 42 void MAX7456::locate(int x, int y) {
faruq 0:869f2c6f960d 43 if ( (x<30) && (y<16) ) {
faruq 0:869f2c6f960d 44 int add = y*30+x; //formula for converting coordinates into denary location
faruq 0:869f2c6f960d 45 _write(DMAL,add);
faruq 0:869f2c6f960d 46 _write(DMAH,add>>8); // what does the ">>" mean?
faruq 0:869f2c6f960d 47 }
faruq 0:869f2c6f960d 48 }
faruq 0:869f2c6f960d 49
faruq 2:46adf929a2ba 50 /*
faruq 2:46adf929a2ba 51 void MAX7456::show(){
faruq 2:46adf929a2ba 52 _write(DMAL,0x1e); // location (0,1)
faruq 2:46adf929a2ba 53 _write(DMDI,0x21); // writing the charater address "W" into DMDI
faruq 0:869f2c6f960d 54
faruq 2:46adf929a2ba 55 _write(DMAL,0x1f); // location (0,1)
faruq 2:46adf929a2ba 56 _write(DMDI,0x19); // writing the charater address "O" into DMDI
faruq 2:46adf929a2ba 57
faruq 2:46adf929a2ba 58 _write(DMAL,0x20); // location (0,1)
faruq 2:46adf929a2ba 59 _write(DMDI,0x1C); // writing the charater address "R" into DMDI
faruq 2:46adf929a2ba 60
faruq 2:46adf929a2ba 61 _write(DMAL,0x21); // location (0,1)
faruq 2:46adf929a2ba 62 _write(DMDI,0x16); // writing the charater address "L" into DMDI
faruq 2:46adf929a2ba 63
faruq 2:46adf929a2ba 64 _write(DMAL,0x22); // location (0,1)
faruq 2:46adf929a2ba 65 _write(DMDI,0x0E); // writing the charater address "D" into DMDI 0x0E
faruq 2:46adf929a2ba 66 }
faruq 2:46adf929a2ba 67 */
faruq 0:869f2c6f960d 68
faruq 0:869f2c6f960d 69 int MAX7456::_getc() {
faruq 1:ba08ad32bb88 70
faruq 0:869f2c6f960d 71 return(0);
faruq 0:869f2c6f960d 72 }
faruq 0:869f2c6f960d 73
faruq 1:ba08ad32bb88 74 void MAX7456::test(){
faruq 1:ba08ad32bb88 75 for (int i = 0 ; i < 255 ; i++) {
faruq 1:ba08ad32bb88 76 printf("Writing 0x%x to VM1\n",i);
faruq 1:ba08ad32bb88 77 _write(VM1,i);
faruq 1:ba08ad32bb88 78 wait (0.01);
faruq 1:ba08ad32bb88 79 int a = _read(VM1);
faruq 1:ba08ad32bb88 80 printf("Read 0x%x from VM1\n",a);
faruq 1:ba08ad32bb88 81 }
faruq 1:ba08ad32bb88 82 int b = _read(VM1);
faruq 1:ba08ad32bb88 83 printf("Read 0x%x from VM1\n",b);
faruq 1:ba08ad32bb88 84 }
faruq 0:869f2c6f960d 85
faruq 0:869f2c6f960d 86 int MAX7456::_putc(int c) {
faruq 0:869f2c6f960d 87
faruq 0:869f2c6f960d 88 if ((c >= 0x31)&&(c <= 0x39)) { //characters from 1-9
faruq 0:869f2c6f960d 89 c= c-0x30;
faruq 2:46adf929a2ba 90 }
faruq 2:46adf929a2ba 91 else if ((c >= 0x41)&&(c <= 0x5A)) { // characters from A-Z
faruq 0:869f2c6f960d 92 c= c-0x36;
faruq 2:46adf929a2ba 93 }
faruq 2:46adf929a2ba 94 else if ((c >= 0x61)&&(c <= 0x7A)) { // characters from a-z
faruq 0:869f2c6f960d 95 c= c-0x3C;
faruq 2:46adf929a2ba 96 }
faruq 2:46adf929a2ba 97 else if ((c == 0x28)&&(c == 0x29)) { //brackets ()
faruq 0:869f2c6f960d 98 c= c + 0x17;
faruq 0:869f2c6f960d 99 }
faruq 0:869f2c6f960d 100
faruq 0:869f2c6f960d 101 _write(DMDI,c);
faruq 0:869f2c6f960d 102
faruq 0:869f2c6f960d 103 return(c);
faruq 0:869f2c6f960d 104 }
faruq 0:869f2c6f960d 105
faruq 1:ba08ad32bb88 106 void MAX7456::setdarkness() {
faruq 0:869f2c6f960d 107 _write(VM1,0xC7);
faruq 1:ba08ad32bb88 108 }
faruq 0:869f2c6f960d 109
faruq 1:ba08ad32bb88 110 void MAX7456::initaddress() {
faruq 1:ba08ad32bb88 111 int d = _read(DMAH);
faruq 1:ba08ad32bb88 112 d= d&0xFC;
faruq 1:ba08ad32bb88 113 _write(DMAH,d); // setting DMAH[1]=0
faruq 1:ba08ad32bb88 114 // to module to read/write character address byte
faruq 1:ba08ad32bb88 115 }
faruq 0:869f2c6f960d 116
faruq 0:869f2c6f960d 117
faruq 0:869f2c6f960d 118
faruq 0:869f2c6f960d 119
faruq 0:869f2c6f960d 120 void MAX7456::vtrim(int v) {
faruq 0:869f2c6f960d 121 }
faruq 0:869f2c6f960d 122
faruq 0:869f2c6f960d 123 void MAX7456::htrim(int h) {
faruq 0:869f2c6f960d 124 }
faruq 0:869f2c6f960d 125
faruq 0:869f2c6f960d 126
faruq 1:ba08ad32bb88 127
faruq 0:869f2c6f960d 128 void MAX7456::format (char mode) {
faruq 0:869f2c6f960d 129
faruq 0:869f2c6f960d 130 if (mode == 'P') {
faruq 0:869f2c6f960d 131 _write(VM0,0x78); // PAL
faruq 0:869f2c6f960d 132 } else if (mode == 'N') {
faruq 0:869f2c6f960d 133 _write(VM0,0x78); // NTSC
faruq 0:869f2c6f960d 134 }
faruq 1:ba08ad32bb88 135
faruq 0:869f2c6f960d 136 }
faruq 0:869f2c6f960d 137
faruq 0:869f2c6f960d 138 int MAX7456::_read(int address) {
faruq 0:869f2c6f960d 139 // force bit 7 to 1 for a read
faruq 0:869f2c6f960d 140 address |= 0x80;
faruq 0:869f2c6f960d 141 _ncs=0; // select device
faruq 0:869f2c6f960d 142 _spi.write(address); // send address
faruq 0:869f2c6f960d 143 int value = _spi.write(0x00); // send dummy
faruq 0:869f2c6f960d 144 _ncs=1; //deselect device
faruq 0:869f2c6f960d 145 return (value);
faruq 0:869f2c6f960d 146 }
faruq 0:869f2c6f960d 147
faruq 0:869f2c6f960d 148 void MAX7456::_write(int address, int data) {
faruq 0:869f2c6f960d 149 // force bit 7 to 0 for a write
faruq 0:869f2c6f960d 150 address &= 0x7f;
faruq 0:869f2c6f960d 151 // select the device
faruq 0:869f2c6f960d 152 _ncs = 0;
faruq 0:869f2c6f960d 153 // write VM1
faruq 0:869f2c6f960d 154 _spi.write(address); // send address
faruq 0:869f2c6f960d 155 _spi.write(data); // send some data
faruq 0:869f2c6f960d 156 // Deselect the device
faruq 0:869f2c6f960d 157 _ncs = 1;
faruq 0:869f2c6f960d 158 }
faruq 0:869f2c6f960d 159
faruq 0:869f2c6f960d 160 }