最近闲来无事 把bf533的外围接口学习一下,通过SPI的总线设置一下Nokia 5110,这款液晶是我买430时带的 自己写下底层驱动 BF533上有SPI接口 这就省了很多麻烦事。这里先用一般的方式写下驱动。一会再用DMA的方式写一下。因为主要是学习DSP的外设,所以液晶只是配置好,并没有设置汉字 图片的读写,这些东西不值得我浪费时间了。本着LINUX的开放源码原则,所有函数如下,保证没有BUG.
现在开始:
//==============================================
//
//Init.c 文件
//接口方式 RST<->PF3 CE<->PF4 DC<->PF1
//DIN<->MOSI CLK<->SPI_C 其他的vcc gnd就不用我说了吧
//
//==============================================
#include <head.h>
void Init_EBIU(void) { *pEBIU_AMBCTL0 = 0x7bb07bb0; *pEBIU_AMBCTL1 = 0x7bb07bb0; *pEBIU_AMGCTL = 0x000f; }
void SPI_lcd_Init(void) { int j; *pFIO_FLAG_C =0x0008; //rst *pFIO_FLAG_S =0x0008; //rst for (j=0; j<0xaff0; j++) asm("nop;"); *pSPI_FLG = FLS4; //ce信号 *pSPI_BAUD = 16; // 5MHz *pSPI_CTL = 0x01 | SIZE | MSTR; *pSPI_CTL = (*pSPI_CTL | SPE); for (j=0; j<0xaff0; j++) asm("nop;");
SPI_send_data(0x21,0); SPI_send_data(0xc8,0); SPI_send_data(0x06,0); SPI_send_data(0x13,0); SPI_send_data(0x20,0); //功能指令 LCD_clear(); SPI_send_data(0x0c,0); for (j=0; j<0xaff0; j++) asm("nop;");
} //SPI send a word function void SPI_send_data(unsigned short data,unsigned short command) { if (command==0) *pFIO_FLAG_C=0x02; else *pFIO_FLAG_S=0x02; *pSPI_TDBR = data; while ((*pSPI_STAT & 0x0001) == 0) ; }
//===================================================== // //LCD.C文件 // //=====================================================
#include <head.h>
void LCD_clear(void) { unsigned int i;
SPI_send_data(0x0c, 0); SPI_send_data(0x80, 0);
for (i=0; i<504; i++) SPI_send_data(0,1); }
void LCD_set_XY(unsigned char X, unsigned char Y) { SPI_send_data(0x40 | Y, 0); // column SPI_send_data(0x80 | X, 0); // row }
void LCD_write_char(unsigned char c) { unsigned char line;
c -=32; //english_6*8_pixel 中所列的ASCII码少了第一列
for (line=0; line<8; line++) SPI_send_data(font6x8[c][line], 1); }
void LCD_write_english_string(unsigned char X,unsigned char Y,char *s) { LCD_set_XY(X,Y); while (*s) { LCD_write_char(*s); s++; } }
void LCD_write_chinese_string(unsigned char X, unsigned char Y, unsigned char ch_with,unsigned char num, unsigned char line,unsigned char row) { unsigned char i,n; LCD_set_XY(X,Y); //设置初始位置 for (i=0;i<num;) //注意FOR 语句的 i 值在什么时候开始加1 { for (n=0; n<ch_with*2; n++) //写一个汉字,ch_with=1 { if (n==ch_with) //写汉字的下半部分 { if (i==0) LCD_set_XY(X,Y+1); else LCD_set_XY((X+(ch_with+row)*i),Y+1); } SPI_send_data(write_chinese[line+i][n],1); } i++; LCD_set_XY((X+(ch_with+row)*i),Y); } }
//===========================================
//
//main.c 文件
//
//==========================================
//** file: spi.c //** target: ADSP-BF533 //** creat time: 2008-8-19
#include <head.h>
//SPI interface funtion
const unsigned char font6x8[][6] = { { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, // sp { 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00 }, // ! { 0x00, 0x00, 0x07, 0x00, 0x07, 0x00 }, // " { 0x00, 0x14, 0x7f, 0x14, 0x7f, 0x14 }, // # { 0x00, 0x24, 0x2a, 0x7f, 0x2a, 0x12 }, // $ { 0x00, 0x62, 0x64, 0x08, 0x13, 0x23 }, // % { 0x00, 0x36, 0x49, 0x55, 0x22, 0x50 }, // & { 0x00, 0x00, 0x05, 0x03, 0x00, 0x00 }, // ' { 0x00, 0x00, 0x1c, 0x22, 0x41, 0x00 }, // ( { 0x00, 0x00, 0x41, 0x22, 0x1c, 0x00 }, // ) { 0x00, 0x14, 0x08, 0x3E, 0x08, 0x14 }, // * { 0x00, 0x08, 0x08, 0x3E, 0x08, 0x08 }, // + { 0x00, 0x00, 0x00, 0xA0, 0x60, 0x00 }, // , { 0x00, 0x08, 0x08, 0x08, 0x08, 0x08 }, // - { 0x00, 0x00, 0x60, 0x60, 0x00, 0x00 }, // . { 0x00, 0x20, 0x10, 0x08, 0x04, 0x02 }, // / { 0x00, 0x3E, 0x51, 0x49, 0x45, 0x3E }, // 0 { 0x00, 0x00, 0x42, 0x7F, 0x40, 0x00 }, // 1 { 0x00, 0x42, 0x61, 0x51, 0x49, 0x46 }, // 2 { 0x00, 0x21, 0x41, 0x45, 0x4B, 0x31 }, // 3 { 0x00, 0x18, 0x14, 0x12, 0x7F, 0x10 }, // 4 { 0x00, 0x27, 0x45, 0x45, 0x45, 0x39 }, // 5 { 0x00, 0x3C, 0x4A, 0x49, 0x49, 0x30 }, // 6 { 0x00, 0x01, 0x71, 0x09, 0x05, 0x03 }, // 7 { 0x00, 0x36, 0x49, 0x49, 0x49, 0x36 }, // 8 { 0x00, 0x06, 0x49, 0x49, 0x29, 0x1E }, // 9 { 0x00, 0x00, 0x36, 0x36, 0x00, 0x00 }, // : { 0x00, 0x00, 0x56, 0x36, 0x00, 0x00 }, // ; { 0x00, 0x08, 0x14, 0x22, 0x41, 0x00 }, // < { 0x00, 0x14, 0x14, 0x14, 0x14, 0x14 }, // = { 0x00, 0x00, 0x41, 0x22, 0x14, 0x08 }, // > { 0x00, 0x02, 0x01, 0x51, 0x09, 0x06 }, // ? { 0x00, 0x32, 0x49, 0x59, 0x51, 0x3E }, // @ { 0x00, 0x7C, 0x12, 0x11, 0x12, 0x7C }, // A { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x36 }, // B { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x22 }, // C { 0x00, 0x7F, 0x41, 0x41, 0x22, 0x1C }, // D { 0x00, 0x7F, 0x49, 0x49, 0x49, 0x41 }, // E { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x01 }, // F { 0x00, 0x3E, 0x41, 0x49, 0x49, 0x7A }, // G { 0x00, 0x7F, 0x08, 0x08, 0x08, 0x7F }, // H { 0x00, 0x00, 0x41, 0x7F, 0x41, 0x00 }, // I { 0x00, 0x20, 0x40, 0x41, 0x3F, 0x01 }, // J { 0x00, 0x7F, 0x08, 0x14, 0x22, 0x41 }, // K { 0x00, 0x7F, 0x40, 0x40, 0x40, 0x40 }, // L { 0x00, 0x7F, 0x02, 0x0C, 0x02, 0x7F }, // M { 0x00, 0x7F, 0x04, 0x08, 0x10, 0x7F }, // N { 0x00, 0x3E, 0x41, 0x41, 0x41, 0x3E }, // O { 0x00, 0x7F, 0x09, 0x09, 0x09, 0x06 }, // P { 0x00, 0x3E, 0x41, 0x51, 0x21, 0x5E }, // Q { 0x00, 0x7F, 0x09, 0x19, 0x29, 0x46 }, // R { 0x00, 0x46, 0x49, 0x49, 0x49, 0x31 }, // S { 0x00, 0x01, 0x01, 0x7F, 0x01, 0x01 }, // T { 0x00, 0x3F, 0x40, 0x40, 0x40, 0x3F }, // U { 0x00, 0x1F, 0x20, 0x40, 0x20, 0x1F }, // V { 0x00, 0x3F, 0x40, 0x38, 0x40, 0x3F }, // W { 0x00, 0x63, 0x14, 0x08, 0x14, 0x63 }, // X { 0x00, 0x07, 0x08, 0x70, 0x08, 0x07 }, // Y { 0x00, 0x61, 0x51, 0x49, 0x45, 0x43 }, // Z { 0x00, 0x00, 0x7F, 0x41, 0x41, 0x00 }, // [ { 0x00, 0x55, 0x2A, 0x55, 0x2A, 0x55 }, // 55 { 0x00, 0x00, 0x41, 0x41, 0x7F, 0x00 }, // ] { 0x00, 0x04, 0x02, 0x01, 0x02, 0x04 }, // ^ { 0x00, 0x40, 0x40, 0x40, 0x40, 0x40 }, // _ { 0x00, 0x00, 0x01, 0x02, 0x04, 0x00 }, // ' { 0x00, 0x20, 0x54, 0x54, 0x54, 0x78 }, // a { 0x00, 0x7F, 0x48, 0x44, 0x44, 0x38 }, // b { 0x00, 0x38, 0x44, 0x44, 0x44, 0x20 }, // c { 0x00, 0x38, 0x44, 0x44, 0x48, 0x7F }, // d { 0x00, 0x38, 0x54, 0x54, 0x54, 0x18 }, // e { 0x00, 0x08, 0x7E, 0x09, 0x01, 0x02 }, // f { 0x00, 0x18, 0xA4, 0xA4, 0xA4, 0x7C }, // g { 0x00, 0x7F, 0x08, 0x04, 0x04, 0x78 }, // h { 0x00, 0x00, 0x44, 0x7D, 0x40, 0x00 }, // i { 0x00, 0x40, 0x80, 0x84, 0x7D, 0x00 }, // j { 0x00, 0x7F, 0x10, 0x28, 0x44, 0x00 }, // k { 0x00, 0x00, 0x41, 0x7F, 0x40, 0x00 }, // l { 0x00, 0x7C, 0x04, 0x18, 0x04, 0x78 }, // m { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x78 }, // n { 0x00, 0x38, 0x44, 0x44, 0x44, 0x38 }, // o { 0x00, 0xFC, 0x24, 0x24, 0x24, 0x18 }, // p { 0x00, 0x18, 0x24, 0x24, 0x18, 0xFC }, // q { 0x00, 0x7C, 0x08, 0x04, 0x04, 0x08 }, // r { 0x00, 0x48, 0x54, 0x54, 0x54, 0x20 }, // s { 0x00, 0x04, 0x3F, 0x44, 0x40, 0x20 }, // t { 0x00, 0x3C, 0x40, 0x40, 0x20, 0x7C }, // u { 0x00, 0x1C, 0x20, 0x40, 0x20, 0x1C }, // v { 0x00, 0x3C, 0x40, 0x30, 0x40, 0x3C }, // w { 0x00, 0x44, 0x28, 0x10, 0x28, 0x44 }, // x { 0x00, 0x1C, 0xA0, 0xA0, 0xA0, 0x7C }, // y { 0x00, 0x44, 0x64, 0x54, 0x4C, 0x44 }, // z { 0x14, 0x14, 0x14, 0x14, 0x14, 0x14 } // horiz lines };
char write_chinese[][24]={
//徐 {0x28,0xF4,0x0B,0x50,0x58,0x54,0xF3,0x52,0x54,0x48,0x50,0x00,0x00,0x07,0x00,0x04,0x03,0x04,0x07,0x00,0x01,0x06,0x00,0x00}, //海 {0x99,0x62,0x58,0xC4,0x7B,0x4A,0xEA,0x4A,0xCA,0x7A,0x42,0x00,0x07,0x00,0x00,0x01,0x01,0x01,0x05,0x05,0x07,0x01,0x01,0x00}, //洋 {0x09,0xD2,0x00,0x84,0xA5,0xA6,0xFC,0xA6,0xA5,0xA4,0x84,0x00,0x01,0x07,0x00,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x00,0x00}, };
//===================================================== // //ce<->pf4 dc<->pf1 rst<-pf3> // //=====================================================
void main(void) { *pFIO_DIR = 0x0f; Init_EBIU(); SPI_lcd_Init(); LCD_write_english_string(12,3,"NOIt"); //okia 5110 LCD // LCD_write_chinese_string(5,0,12,4,0,5); }
//=================================================
//
//头文件 HEAD.H
//
//==================================================
#ifndef _HEAD_H #define _HEAD_H
#include <ccblkfn.h> #include <cdefBF533.h> #include <stdio.h> #include <sys\exception.h>
void Init_EBIU(void); void SPI_lcd_Init(void); void SPI_send_data(unsigned short data,unsigned short command); void LCD_clear(void); void LCD_set_XY(unsigned char X, unsigned char Y); void LCD_write_char(unsigned char c); void LCD_write_english_string(unsigned char X,unsigned char Y,char *s); void LCD_write_chinese_string(unsigned char X, unsigned char Y, unsigned char ch_with,unsigned char num, unsigned char line,unsigned char row); extern const unsigned char font6x8[][6]; extern char write_chinese[][24];
#endif |