怎么通过nios ii那些事儿来进行控制W5300

扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
数字调频发射机的设计与实现
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口编写驱动程序
步骤1 将ili9325的文件夹加入APP路径
步骤2 编写驱动文件
时间比较紧张,我就贴出来代码,挑重点的讲几句。
代码2.1 ili932x.h
#ifndef ILI932X_H_
#define ILI932X_H_
#include "my_types.h"
#include "my_regs.h"
#define White
#define Black
#define Blue
#define Blue2
#define Red
#define Magenta
#define Green
#define Cyan
#define Yellow
#define ID_AM
#define DB_o_EN
ili_DB-&DIRECTION=0xFF
#define DB_i_EN
ili_DB-&DIRECTION=0x00
void ili_WrDB_2x8b(u8 DH, u8 DL);
void ili_WrCmd(u8 DH, u8 DL);
void ili_WrData(u8 DH, u8 DL);
void ili_WrReg(u8 cmd, u16 data);
void ili_WrDB_16b(u16 data);
void ili_DelayMs(u32 n);
void ili_Initial(void);
void ili_SetCursor(u8 x, u16 y);
void ili_SetDispArea(u16 x0, u16 y0, u8 xLength, u16 yLength, u16 xOffset, u16 yOffset);
void ili_ClearScreen(u32 bColor);
void ili_PlotPoint(u8 x, u16 y, u16 color);
void ili_PlotPixel(u8 x, u16 y, u16 color);
void ili_PlotBigPoint(u8 x, u16 y, u16 color);
void ili_PutAscii_8x16(u16 x, u16 y, uc8 c, u32 fColor, u32 bColor);
void ili_PutGb_16x16(u16 x, u16 y, uc8 c[2], u32 fColor, u32 bColor);
void ili_PutString(u16 x, u16 y, uc8 *s, u32 fColor, u32 bColor);
void ili_DispColorBar(void);
#endif /* ILI932X_H_ */
注意第19~20行,定义两个宏来操纵8位DB双向总线的方向。
代码2.2 ili_932x.c
#include "ili932x.h"
#include "unistd.h"
// usleep()
#include "ascii_8x16.h"
// ascii码字库
#include "GB16.h"
// 汉字字库
// 8位总线模式,通过两次写操作写入高8位和低8位
void ili_WrDB_2x8b(u8 DH, u8 DL)
ili_DB-&DATA=DH;
ili_nWR=0;
ili_nWR=1;
ili_DB-&DATA=DL;
ili_nWR=0;
ili_nWR=1;
void ili_WrCmd(u8 DH, u8 DL)
ili_WrDB_2x8b(DH, DL);
void ili_WrData(u8 DH, u8 DL)
ili_WrDB_2x8b(DH, DL);
// 向DB总线写数据
void ili_WrDB_16b(u16 data)
ili_WrData(data&&8, data);
// 写寄存器
void ili_WrReg(u8 cmd, u16 data)
ili_WrCmd(0x00, cmd);
ili_WrDB_16b(data);
void ili_DelayMs(u32 n)
usleep(n*1000);
// ILI93525初始化
void ili_Initial(void)
// 硬件复位
ili_nRST=0;
ili_DelayMs(1);
ili_nRST=1;
// 打开片选,输出使能
ili_nCS=0;
ili_WrReg(0xE3, 0x3008);
ili_WrReg(0xE7, 0x0012);
ili_WrReg(0xEF, 0x1231); // Set the internal timing
ili_WrReg(0x01, 0x0000); // Set SS and SM bit
ili_WrReg(0x02, 0x0700); // Set 1 line inversion
// 屏幕旋转控制
ID_AM==000
ili_WrReg(0x03, 0x1000); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=00, AM=0
#elif ID_AM==001
ili_WrReg(0x03, 0x1008); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=00, AM=0
#elif ID_AM==010
ili_WrReg(0x03, 0x1010); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=01, AM=0
#elif ID_AM==011
ili_WrReg(0x03, 0x1018); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=01, AM=1
#elif ID_AM==100
ili_WrReg(0x03, 0x1020); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=10, AM=0
#elif ID_AM==101
ili_WrReg(0x03, 0x1028); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=10, AM=1
#elif ID_AM==110
ili_WrReg(0x03, 0x1030); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=11, AM=0
#elif ID_AM==111
ili_WrReg(0x03, 0x1038); // TRI=0, DFM=x, BGR=0, HWM=0, ORG=0, I/D[1:0]=11, AM=1
ili_WrReg(0x04, 0x0000); // Resize register
ili_WrReg(0x08, 0x0404); // Set the back porch and front porch
ili_WrReg(0x09, 0x0000); // Set non-display area refresh cycle ISC[3:0]
ili_WrReg(0x0A, 0x0000); // FMARK function
ili_WrReg(0x0C, 0x0000); // RGB interface setting
ili_WrReg(0x0D, 0x0000); // Frame marker Position
ili_WrReg(0x0F, 0x0000); // RGB interface polarity
// Power on sequence VGHVGL
ili_WrReg(0x10, 0x0000); // SAP, BT[3:0], AP, DSTB, SLP, STB
ili_WrReg(0x11, 0x0007); // DC1[2:0], DC0[2:0], VC[2:0]
ili_WrReg(0x12, 0x0000); // VREG1OUT voltage
ili_WrReg(0x13, 0x1300); // VDV[4:0] for VCOM amplitude
ili_WrReg(0x07, 0x0001);
ili_DelayMs(50);
// Dis-charge capacitor power voltage
ili_WrReg(0x10, 0x1590); // SAP, BT[3:0], AP, DSTB, SLP, STB
ili_WrReg(0x11, 0x0227); // DC1[2:0], DC0[2:0], VC[2:0]
ili_DelayMs(50);
ili_WrReg(0x12, 0x001E); // Internal reference voltage= V
ili_DelayMs(50);
ili_WrReg(0x13, 0x1500); // Set VDV[4:0] for VCOM amplitude
ili_WrReg(0x29, 0x0026); // Set VCM[5:0] for VCOMH
ili_WrReg(0x2B, 0x000F); // Set Frame Rate
ili_DelayMs(50);
ili_WrReg(0x20, 0x0000);
ili_WrReg(0x21, 0x013f);
// GRAM起始位置
ID_AM==000
ili_WrReg(0x20, 0x00EF);
ili_WrReg(0x21, 0x013F);
#elif ID_AM==001
ili_WrReg(0x20, 0x00EF);
ili_WrReg(0x21, 0x013F);
#elif ID_AM==010
ili_WrReg(0x20, 0x0000);
ili_WrReg(0x21, 0x013F);
#elif ID_AM==011
ili_WrReg(0x20, 0x0000);
ili_WrReg(0x21, 0x013F);
#elif ID_AM==100
ili_WrReg(0x20, 0x00EF);
ili_WrReg(0x21, 0x0000);
#elif ID_AM==101
ili_WrReg(0x20, 0x00EF);
ili_WrReg(0x21, 0x0000);
#elif ID_AM==110
ili_WrReg(0x20, 0x0000);
ili_WrReg(0x21, 0x0000);
#elif ID_AM==111
ili_WrReg(0x20, 0x0000);
ili_WrReg(0x21, 0x0000);
// Adjust the Gamma Curve
ili_WrReg(0x30, 0x0007);
ili_WrReg(0x31, 0x0007);
ili_WrReg(0x32, 0x0107);
ili_WrReg(0x35, 0x0206);
ili_WrReg(0x36, 0x0406);
ili_WrReg(0x37, 0x0101);
ili_WrReg(0x38, 0x0101);
ili_WrReg(0x39, 0x0207);
ili_WrReg(0x3C, 0x0504);
ili_WrReg(0x3D, 0x0806);
// Set GRAM area
ili_WrReg(0x50, 0x0000); // Horizontal GRAM Start Address
ili_WrReg(0x51, 0x00EF); // Horizontal GRAM End Address
ili_WrReg(0x52, 0x0000); // Vertical GRAM Start Address
ili_WrReg(0x53, 0x013F); // Vertical GRAM Start Address
ili_WrReg(0x60, 0x2700); // Gate Scan Line
ili_WrReg(0x61, 0x0001); // NDL,VLE, REV
ili_WrReg(0x6A, 0x0000); // Set scrolling line
// Partial Display Control
ili_WrReg(0x80, 0x0000);
ili_WrReg(0x81, 0x0000);
ili_WrReg(0x82, 0x0000);
ili_WrReg(0x83, 0x0000);
ili_WrReg(0x84, 0x0000);
ili_WrReg(0x85, 0x0000);
// Panel Control
ili_WrReg(0x90, 0x0010);
ili_WrReg(0x92, 0x0600);
ili_WrReg(0x93, 0x0003);
ili_WrReg(0x95, 0x0110);
ili_WrReg(0x97, 0x0000);
ili_WrReg(0x98, 0x0000);
ili_WrReg(0x07, 0x0173); // 262K color and display ON
// 关闭片选
ili_nCS=1;
// 设定Cursor
void ili_SetCursor(u8 x, u16 y)
ili_WrReg(0x20, x);
ili_WrReg(0x21, y);
// 设定显示区域
void ili_SetDispArea(u16 x0, u16 y0, u8 xLength, u16 yLength, u16 xOffset, u16 yOffset)
#if ID_AM==000
ili_SetCursor(x0+xLength-1+xOffset, y0+yLength-1+yOffset);
#elif ID_AM==001
ili_SetCursor(x0+xLength-1+xOffset, y0+yLength-1+yOffset);
#elif ID_AM==010
ili_SetCursor(x0+xOffset, y0+yLength-1+yOffset);
#elif ID_AM==011
ili_SetCursor(x0+xOffset, y0+yLength-1+yOffset);
#elif ID_AM==100
ili_SetCursor(x0+xLength-1+xOffset, y0+yOffset);
#elif ID_AM==101
ili_SetCursor(x0+xLength-1+xOffset, y0+yOffset);
#elif ID_AM==110
ili_SetCursor(x0+xOffset, y0+yOffset);
#elif ID_AM==111
ili_SetCursor(x0+xOffset, y0+yOffset);
ili_WrReg(0x50, x0+xOffset);
// 水平 GRAM起始位置
ili_WrReg(0x51, x0+xLength-1+xOffset);
// 水平GRAM终止位置
ili_WrReg(0x52, y0+yOffset);
// 垂直GRAM起始位置
ili_WrReg(0x53, y0+yLength-1+yOffset);
// 垂直GRAM终止位置
ili_WrCmd(0x00, 0x22);
void ili_ClearScreen(u32 bColor)
ili_nCS=0;
ili_SetDispArea(0, 0, 240, 320, 0, 0);
for (i=0; i&76800; i++) ili_WrDB_16b(bColor);
ili_nCS=1;
// 画点(单次操作)
void ili_PlotPoint(u8 x, u16 y, u16 color)
ili_nCS=0;
ili_SetCursor(x, y);
ili_WrCmd(0x00, 0x22);
ili_WrDB_16b(color);
ili_nCS=1;
// 画点(连续操作的一部分)
void ili_PlotPixel(u8 x, u16 y, u16 color)
ili_SetCursor(x, y);
ili_WrCmd(0x00, 0x22);
ili_WrDB_16b(color);
// 画一个大点
void ili_PlotBigPoint(u8 x, u16 y, u16 color)
ili_nCS=0;
for(i=0; i&3; i++)
for(j=0; j&3; j++) ili_PlotPixel(x+i, y+j, color);
ili_nCS=1;
// 打印ASCII码(8x16)
void ili_PutAscii_8x16(u16 x, u16 y, uc8 c, u32 fColor, u32 bColor)
ili_nCS=0;
ili_SetDispArea(x, y, 8, 16, 0, 0);
for(i=0; i&16; i++)
temp = ascii_8x16_tab[c*16+i];
for(j=0; j&8; j++)
if((temp&0x80) == 0x80)
ili_WrDB_16b(fColor);
ili_WrDB_16b(bColor);
temp &&= 1;
ili_nCS=1;
// 打印汉字(16x16)
void ili_PutGB16(u16 x, u16 y, uc8 c[2], u32 fColor, u32 bColor)
ili_nCS=0;
ili_SetDispArea(x, y, 16, 16, 0, 0);
for(k=0; k&64; k++) // 64表示自建汉字库中的个数,循环查询内码
if ( (GB16[k].Index[0]==c[0])
&& (GB16[k].Index[1]==c[1]) )
for(i=0; i&32; i++)
temp = GB16[k].Msk[i];
for(j=0; j&8; j++)
if((temp&0x80)==0x80)
ili_WrDB_16b(fColor);
ili_WrDB_16b(bColor);
temp &&= 1;
ili_nCS=1;
// 打印字符串
void ili_PutString(u16 x, u16 y, uc8 *s, u32 fColor, u32 bColor)
while(*s != '\0')
if(*s & 0x80)
ili_PutAscii_8x16(x+l*8, y, *s, fColor, bColor);
ili_PutGB16(x+l*8, y, (u8*)s, fColor, bColor);
// 彩条测试
void ili_DispColorBar(void)
ili_nCS=0;
ili_SetDispArea(0, 0, 240, 320, 0, 0);
for(H=0; H&240; H++)
for(V=0; V&40; V++) ili_WrDB_16b(White);
for(H=0;H&240;H++)
for(V=40; V&80; V++) ili_WrDB_16b(Black);
for(H=0;H&240;H++)
for(V=80; V&120; V++) ili_WrDB_16b(Blue);
for(H=0;H&240;H++)
for(V=120; V&160; V++) ili_WrDB_16b(Red);
for(H=0;H&240;H++)
for(V=160; V&200; V++) ili_WrDB_16b(Magenta);
for(H=0;H&240;H++)
for(V=200; V&240; V++) ili_WrDB_16b(Green);
for(H=0;H&240;H++)
for(V=240; V&280; V++) ili_WrDB_16b(Cyan);
for(H=0;H&240;H++)
for(V=280;V&320;V++) ili_WrDB_16b(Yellow);
ili_nCS=1;
注意几个地方:
1. 初始化函数内的void ili_Initial(void)的硬件复位,nRST一定要拉低足够长时间再拉高,此处取1ms,否则会出现白屏现象。
ili_nRST=0;
ili_DelayMs(1);
ili_nRST=1;
2. 为了减少DB双向总线的方向切换次数及打开关闭nCS片选的此处,每次操作中只设定一次DB方向,且只打开关闭片选一次。比方在初始化函数内的void ili_Initial(void)内。
// 打开片选,输出使能
ili_nCS=0;
// 关闭片选
ili_nCS=1;
因此,特别需要注意,写一组或一个寄存器前后,或写一个或一组数据到DB总线前后,只做一次设定DB方向和打开关闭片选动作。此外,千万不要将nCS永远拉低,浪费功率,最好用的时候打开,不用的时候关断。
3. 连续重复某个动作的时候,也执行第2条。比方说第246~266行,ili_PlotPixel()函数的引用。
步骤3 测试ILI9325驱动
代码3.1 main.c
#include &stdio.h&
// printf()
#include &unistd.h&
// usleep()
#include "my_types.h"
// 数据类型
#include "debug.h"
#include "sd_card.h"
#include "ili932x.h"
// ili9325
//#define ENABLE_APP_DEBUG // turn on debug message
#ifdef ENABLE_APP_DEBUG
#define APP_DEBUG(x)
#define APP_DEBUG(x)
int main(void)
ili_Initial();
// 初始化ILI9325
ili_DispColorBar();
// 彩条测试
测试效果如下(50¥的摄像头拍的,凑活看吧)。内置1-wire SHA-256和EEP
内置1-wire SHA-256和EEP
恩智浦逻辑器件在消费性电子产品市场居于领先地位,率先针对消费性电子产品推出超低电压AXP逻辑器件系列产品.并针...... 恩智浦&&&&日&&&&
重点介绍针对不同应用的LED电源的参考设计,功率范围从几瓦到上百瓦,涵盖非隔离、隔离反激、隔离单级高功率...... 安森美&&&&日&&&&
本次研讨会中,来自赛灵思的专家团队将与您一起探讨有关无线回程的容量、联网、以及信号处理方面的挑战。之后还将特别讨论一下毫米波(E、V波段)射频技术...... 赛灵思&&&&日&&&&
新唐科技于2014年推出高性价比之Cortex™ - M4产品-M451家族, 其涵盖了M451 系列、M451M系列、M452 USB系列及..... 新唐&&&&日&&&&
本次座谈将介绍富士通FRAM FRID产品,富士通半导体开发并生产内嵌FRAM的RFID产品,覆盖了HF(高频:13.56MHz)...... 富士通&&&&日&&&&
现在每个人都有智能手机, 而且很流行通过一些手机附件来进一步增强手机的用户体验,这些附件功能丰富,音频类的,游戏类的,健康类的,运动类的等等...... 飞思卡尔&&&&日&&&&
瑞萨电子中国针对中国市场推出了一系列R7F0C系列单片机,基于RL78 MCU内核,除了具有低功耗和高性能的共同特点,R7F0C系列里的产品还有不同的特长...... 瑞萨&&&&日&&&&
数字电位计(digiPOT)可方便地调整传感器、电源或其他需进行某种校准的器件的交流或直流电压或电流输出。 本网络研讨会将讨论各种应用中数字电位计的功能、用途和优势...... ADI&&&&日&&&&

我要回帖

更多关于 nios ii那些事儿 的文章

 

随机推荐