x
电信 学 院
嵌入式系统设计 实验报告
实 验 名 称 USB接口及以太网接口实验 专 业 班 级 电信 102 姓 名 学号 指 导 教 师 x
一、实验任务
1、U盘扇区的读写。2、以太网简易通信。3、TFT彩屏使用与简单GUI。
二、实验原理
CH375芯片的TXD引脚接地, 从而使其工作于并口模式。CH375芯片的8位双向数据总线直接与MCU数据口相连,RD#和WR#分别连接到单片机的读选通输出引脚和写选通输出引脚。片选信号CS#、中断引脚INT#以及地址输入线A0分别与MCU任意分配的引脚相连。当CS#为低电平时,选通CH375芯片;CH375向MCU请求中断时,将INT#引脚电平拉低,这个时候可以读取中断状态,读到的数据可以判断当前芯片或是工作处于什么状态,也可以分析错误原因,在调试的时候使用,可以编写两版程序,一版用于调试,一版用于实际应用;当A0引脚为高电平时,选择CH375的命令端口,可以写入命令,为低电平时选择数据端口, 可以读写数据,具体操作时序详见数据手册。
实验箱上配有一块2.4(240 * 320)寸的TFT触摸彩屏模块,内置TFT专用控制器ILI9325、电阻式触摸屏控制器XPT2046、总线驱动芯片74HC245、电源管理芯片AMS1117-3.3V,还有一个SD卡槽。这个模块实际上就是把一块2.4寸TFT触摸彩屏、控制器、电源管理芯片、电平转化芯片和SD卡槽等器件集成在了一起,并留出了信号和电源的物理接口。
三、实验步骤
1、打开IAR FOR ARM建立新工程,并进行命名、保存。
2、在新工程上右击选择options设置选项,在General Options中的divice项选择NXP公司的LPC2148处理器;在output中的Output Converter项的输出类型选择为Intel型;在Linker中的linker configuration fiel项选择事前复制的*icf文件;在Debugger的Driver中选择J-Link在download选项中将verify download和use flash loader两个选项打勾,点击OK完成设置。
3、新建一个文件,保存文件类型为*.c,在工程上右击选择添加这个c文件,则可以在该C文件中编写程序,实现功能。
4、程序编写好后,点击compile,有错修改,直至无error,有警告可以不理会。然后点击make生成*.hex文件。
5、将J-Link连接至ARM实验箱,在IAR中点击载到ARM芯片中,然后点击
(download and debug)将程序下
全速执行。若有不符合要求的地方,可以修改程序或单步调
试查找错误点,直至符合要求。
四、实验原理图
74HC375模块连接图:
ENC28J60模块连接图
五、实验程序 USB程序
=============================================================================*/ #include ’..’
#include \"uart.h\" //用串口打印调试信息,需包含
#define TEST_ADDR 123456//测试扇区地址 #define TEST_COUNT 1 //测试扇区数
INT8 DISK_BUFFER[512*32];
void SyS_Init(void) { } //主函数 int main( ) {
printf(\"NO.%d Sector Test.\\n\UINT16 i,Count = 0; SyS_Init();
printf( \"PLL/UART/CH375 Init Over.\\n\"); while (1) {
printf(\"Insert USB disk.\\n\" );
while (WaitUsbInserted()); /* 等待U盘连接 */ Delay_1ms(250); /* 延时等待U盘进入正常工作状态 */
while(mInitDisk()); /* 初始化U盘,实际是识别U盘的类型,必须进行此步骤 */ PLL_Init();
InitUart(1, 60000000, 9600); while(CH375_Init());
for(i=0; i<(512*TEST_COUNT); i++) }
=============================================================================*/ #include “..”
#include \"uart.h\" //用串口打印调试信息,需包含
/*********************************************************** 函数名称:CH375_Init(void) 函数功能:CH375的初始化 入口参数:NA
出口参数:操作失败则停止运行
0 操作成功
备 注: 外部调用
***********************************************************/ UINT8 CH375_Init(void) {
static UINT8 i, test;
#if UART_DEBUG > 0
}
{ }
mWriteSector(TEST_ADDR,TEST_COUNT,DISK_BUFFER);
for(i=0; i<(512*TEST_COUNT); i++) { }
mReadSector(TEST_ADDR,TEST_COUNT,DISK_BUFFER); //读取扇区到缓冲区,打印缓冲区 for(i=0; i<(512*TEST_COUNT); i++) { }
printf(\"\\n\"); printf(\"\\n\");
printf( \"Waitting Pull-out USB disk\\n\" );
while ( mWaitInterrupt( ) != USB_INT_DISCONNECT ); /* 等待U盘拔出 */ Delay_1ms( 250 );
if((Count)%16==0) //控制每行打印16个数据 { }
printf(\"%02x \Count++;
printf(\"\\n\");
DISK_BUFFER[i]=0; //清除缓冲区 DISK_BUFFER[i] = i;
//向数据缓冲区中写入0~255 0~255,共512个字节
printf(\"Start CH375 Init.\\n\"); #endif
Init_CH375_Port();
#if UART_DEBUG > 0
printf(\"Get IC Version.\\n\"); #endif
CH375_WR_CMD_PORT(CMD_GET_IC_VER); /* 获取芯片版本号*/ i = CH375_RD_DAT_PORT(); #if UART_DEBUG > 0
printf(\" IC_Version: %02X\\n\ #endif
#if UART_DEBUG > 0
printf(\"Test CH375 Work.\\n\"); #endif
CH375_WR_CMD_PORT(CMD_CHECK_EXIST); /* 测试CH375是否正常工作 */ CH375_WR_DAT_PORT(0x55); test = ~0x55; {
#if UART_DEBUG > 0
printf(\" CH375 Work Error, Start HardWare Reset.\\n\"); #endif
for (i=HARDWARE_RESET; i!=0; i--) {
CH375_WR_CMD_PORT(CMD_RESET_ALL); /* 多次重复发命令,执行硬件复位 */ CH375_RD_DAT_PORT(); }
CH375_WR_CMD_PORT(0);
Delay_1ms(40); /* 延时50ms */ #if UART_DEBUG > 0
printf(\" HardWare Reset %d times, Test CH375 Work Again.\\n\ #endif
CH375_WR_CMD_PORT(CMD_CHECK_EXIST); /* 测试CH375是否正常工作 */ CH375_WR_DAT_PORT(0x55); test = ~0x55; {
#if UART_DEBUG > 0
printf(\" Test CH375 Work Error Again, Stop Run And Please Chack Hardware.\\n\"); #endif
/* 写入测试数据 */
/* 返回数据应该是测试数据取反 */
/* 写入测试数据 */
/* 返回数据应该是测试数据取反 */
/*CH375端口初始化*/
if (CH375_RD_DAT_PORT() != test) /* CH375不正常 */
if (CH375_RD_DAT_PORT() != test)
while(1); } }
#if UART_DEBUG > 0
printf(\" CH375 Work Normal.\\n\");
printf(\"Set CH375 Mode.\\n\"); /* 设置USB工作模式, 必要操作 */ #endif
CH375_WR_CMD_PORT(CMD_SET_USB_MODE);
CH375_WR_DAT_PORT(USB_MODE); /*USB主机模式,自动产生SOF包*/ #if UART_DEBUG > 0
printf(\" CH375 Mode: %02x.\\n\/* 设置USB工作模式, 必要操作 */ #endif
for (i=100; i!=0; i--) /* 等待操作成功,通常需要等待10uS-20uS */ {
if (CH375_RD_DAT_PORT() == CMD_RET_SUCCESS) break; }
if (0 == i) /*CH372/CH375存在硬件错误*/ {
#if UART_DEBUG > 0
printf(\" Set CH375 Mode Error, Stop Run And Please Chack Hardware.\\n\"); #endif while(1); }
#if UART_DEBUG > 0
printf(\" CH375 Init OK.\\n\"); #endif return 0; }
六、实验总结