与嵌入式基础实验教程_第1页
与嵌入式基础实验教程_第2页
与嵌入式基础实验教程_第3页
与嵌入式基础实验教程_第4页
与嵌入式基础实验教程_第5页
免费预览已结束,剩余74页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AT91SAM7S64AT91SAM7S64开发板硬件功能特 硬件原理电路原理图硬件结构元件布局图跳线器说明连接器说明其他 AT91SAM7S64的基本功能介绍 FLASH烧写程序实AT91SAM7S64的闪存容量是64KB,是少出脚数智能ARM7微控制器(SAM7S系列)系列的第一除了8位微控制器的实时性能,它们还是业界32位微控制器,集成了完整安全操作功能,包括由片内RC振荡器供时钟的看门狗,电源监视器和闪存的硬件保护。用,这些地方目前仅限制在8位的性能。AT91SAM7S64832位的驱动器,特别是实时应用的改进性确定性的性能。它能从嵌入闪存得到单周期指令存取,性能达27MIPS。它的先进中断控制器加强了ARM7处理器的基本中断能力,以最小指令周期数提供向量优先中断处理.它的硬件位设定和以前代码的端口和限定是832MCU的重要任务。为了便于应用开发,AT91SAM7S64JTAG在电路仿真接口的功能强大的调试功能,并用片内硬件类未对准地址检测和在调整期间的看门狗停用来进行补充。FFT提供包括评估板,JTAG-ICE接口,8位微控制器的开发工具。因此,降低了学习工作量。高度功能集成的AT91SAM7S64PC连接的USB2.0全速设备端口,810ADCDMA功能,它能减轻处理器在外部I/O通路和器间数据传输的动态空间。并行I/O控制器用一套32位可编程的通用I/O线来复接外设I/O,因此降低了外部引脚数而提供了附加接入的灵活性。片内的电压调整器使得可用3.3V单电源工作.JTAG-ICE接口或并行接口在系统内编程.闪存包含使外界不能获知(DBGU; J3、J4、J5、 USBBAT91SAM7S64开发板第二 的基本功能介和Debug通信通道。省电模式用于优化功耗,使可以停止ARM7TDMI的时钟(IDLE模式,发生中AIC还提供了伪向量,以便将这类伪中断处理减少到最少程度。看门狗可以提供复位或中断32I/O11个数据控制器通道USB2.0设备端口(12Mbitsper2个通用同步串行控制器(SSC)USART1支持MODEM一个串形接口一个三通道16位定时/计数器(TC)控制两个复用I/O信号 一个四通道16位 一个8通道10A/D转换器全静态工作:551.8VI/O工作电压,3.3VFLASH-40~85摄时度的64—leadLQFPAT91SAM7S64的引脚配置图 的各引脚对称如表所列AT91SAM7S64被使用,VDDIN应当接在GND;V(通常3.3V)1.65V~1.95V(通常1.85V)3.0V电压USB则不能工作。常为3.3V。VVDDPLLPLLVDDOUT引脚。电气地AT91SAM7S64VDDCORE2560uA的静态电流。在全速运行FLASH时,电源功耗在VDDCORE引脚小于50mA。JTAG接口针:TMS,TDI和TCK为)触发输入。TMS,TDI和TCK不需要接上拉JTAG边界扫描。JTAGSEL15K欧姆的电阻,以便与能够在测试针:TST被用作测试和快速编程模式。TST15K欧姆的电阻,以TST与PA0PA1复位针:NRST为低电平有效输入,与慢速时钟异步地施加,但复位退出则与主时钟同步。NRST针与VDDIO之间连接了上拉电阻。擦除针:ERASEFLASHNVM位。ERASEPIOAI/O口线(PA0~PA31)5V两套指令集(32ARM16Thumb指令集两针的UARTIEEE1149.1JTAG边界扫描。三个1Mbyte的区重命ARM的复位向量位于地址0。当NRST后,ARM7TDMI首个A/D转换器64Kbytes包含:512页(每页128字节,快速,页编程时间为(4ms,包含页擦除,不包含擦除时间为2ms),整片擦除时间为10ms,可以擦除10000,数据可以保存10年之久,块锁住区域保证安全片内在复位后且在之前的地址为0x00200000,在之后地址 ( 前后

APB—AdvancedPeripheralBus).用户接口包含以下:编程在FLASH中数据,整片擦除和页擦除,页编程,NVM位ARM16位数据宽的数据处理能力,因而优化使用了ARM7TDMI的先进性能。8Kbytes,如果对已保护的区域进行擦除和编程,此时命令被终止20KHz40KHz320MHzPLL80200MHz之间。0被用作快速中断输入(FIQ

两针的UART:ID寄存器:ID0x27090540(版本为0)2012位定时器,作为一个用户可编程的时间基可以提供复位或中断可选择为正常模式(0被清除)或备用模式(0被设置

外设标识符 包含大范围的外设。下表定义了外设标识符。在控制中(AIC)和控制时钟(PMC),外设标识符被需要

59ISO7816,T=0T=1

12:643:64

810 GPIO输出控制熟悉AT91SAM7S64的基本性能(参照文档硬件:PC 一 一如何在FFT-AT91SAM7S64开发板上运行一说明(PC)属于在PC机上的操作,即的操(硬件 ADS1.2ADS1.2的文档或相关资料3、连接仿真器和FFT-AT91SAM7S64开发1、连接仿真器和FFT-AT91SAM7S64开发板,然后安装仿真器的驱动程序5、设置相应的RO、RW按SW2和SW3,判断LED流水灯的变化。#include/*#defineSPEED unsignedintLedSpeed=SPEED*50;constintled_mask[8]={LED1,LED2,LED3,//*功能名 ://*实验功 :通过开关SW2、SW4,调整”LedSpeed”的数//*参 ://*出口参 voidchange_speed(void{{if(LedSpeed>SPEED)LedSpeed-=SPEED}{if(LedSpeed<MCK)LedSpeed+=SPEED}}//*功能名 ://*实验功 :循环等//*参 ://*出口参 :voidwait(void{unsignedintwaiting_time;change_speed();}//*功能名 ://*实验功 :实现可调节LED流水灯的速度(//*参 ://*出口参 :int{int//PIOA//LEDAT91F_PIO_CfgOutput(AT91C_BASE_PIOA,LED_MASK)//LEDAT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED_MASK)//for{for(i=0;i<NB_LEB;i++{}//Endfor(i=(NB_LEB-1);i>=0;i--{}}}UART控制实熟悉AT91SAM7S64的基本性能(参照文档硬件:PC 一 一如何在FFT-AT91SAM7S64开发板上运行一说明(PC)属于在PC机上的操作,即的操(硬件 ADS1.2ADS1.2的文档或相关资料3、连接仿真器和FFT-AT91SAM7S64开发1、连接仿真器和FFT-AT91SAM7S64开发板,然后安装仿真器的驱动程序5、设置相应的RO、RW#include staticconstchar{ ***FFTUsartIRQ"Copyright(C)2004FFTCorporationsVersion://*81,#defineAT91C_US_ASYNC_MODE(AT91C_US_USMODE_NORMAL+AT91C_US_PAR_NONE+\AT91C_US_CHRL_8_BITS+\AT91C_US_CLKS_CLOCK) : //*参 : :voidUsart_init(void{((unsignedint)AT91C_PA5_RXD0 ((unsignedint)AT91C_PA6_TXD0 )|((unsignedint)AT91C_PA7_RTS0 )|((unsignedint)AT91C_PA8_CTS0 //配置Usart// AT91C_US_OVRE|AT91C_US_RXRDY);AT91F_US_SendFrame(COM0,(char}//#includestaticconstchar{ ***LED1Lightingstaticconstchar{ ***LED2Lightingstaticconstchar{ ***LED3Lightingstaticconstchar{ ***LED4LightingexternvoidUsart_init(void); Delay(intdly){}

inti; : ://*参 : :void{int//PIO//AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,LED_MASK)//for{if((sw1&SW1_MASK)==0){AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED1){AT91F_US_SendFrame(COM0,(char}}AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED1)if((sw2&SW2_MASK)==0){AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED2){AT91F_US_SendFrame(COM0,(char}}AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED2)if((sw3&SW3_MASK)==0){AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED3){AT91F_US_SendFrame(COM0,(char}}AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED3)if((sw4&SW4_MASK)==0){AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED4){AT91F_US_SendFrame(COM0,(char}}AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED4)}}通过串口从上位机发送指令控制流水灯实验熟悉AT91SAM7S64的基本性能(参照文档硬件:PC 一 一如何在FFT-AT91SAM7S64开发板上运行一说明(PC)属于在PC机上的操作,即的操(硬件 ADS1.2ADS1.2的文档或相关资料3、连接仿真器和FFT-AT91SAM7S64开发9、连接仿真器和FFT-AT91SAM7S64 启动ADS1.2,建立工程或者使用AT91SAM7S-Switch-ADS_2-1_2工程并配合上位机FFTUART程序进行调试。11、填加启动代码Cstartup.s、Cstartup_SAM7.c以及填加实验程序main.c、12、设置相应的RO、RW13 选择[Project]->[Debug],启动AXD进行仿真调试(需要正确设置仿真器 #include staticconstchar{ ***FFTUsartIRQ"Copyright(C)2004FFTCorporationsVersion://*81,#defineAT91C_US_ASYNC_MODE(AT91C_US_USMODE_NORMAL+AT91C_US_PAR_NONE+\AT91C_US_CHRL_8_BITS+\AT91C_US_CLKS_CLOCK) : //*参 : :voidUsart_init(void{((unsignedint)AT91C_PA5_RXD0 ((unsignedint)AT91C_PA6_TXD0 )|((unsignedint)AT91C_PA7_RTS0 )|((unsignedint)AT91C_PA8_CTS0 AT91C_ID_US0); AT91_BAUD_RATE,0);// AT91C_US_OVRE|AT91C_US_RXRDY);AT91F_US_SendFrame(COM0,(char}//#includeexternvoidUsart_init(void); Delay(intdly){inti;} : ://*参 : :void{int//PIO//AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,LED_MASK)for(;;){{case0x35:AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED1);;break;case0x36:AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED2);;break;case0x37:AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED3);;break;case0x38:AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED4);;break;}}}通过DBGU获取FLASH基本信息并进行FLASH基本操作熟悉AT91SAM7S64的基本性能(参照文档熟悉在开发板上运行一个程序(无操作系统硬件:PC 一 一如何在FFT-AT91SAM7S64开发板上运行一说明(PC)属于在PC机上的操作,即的操(硬件 ADS1.2ADS1.2的文档或相关资料9、连接仿真器和FFT-AT91SAM7S64开发10 11 12 16、连接仿真器和FFT-AT91SAM7S64开发板,然后安装仿真器17 AT91SAM7S64_BasicFlash-ADS1_2-1_1工程19、设置相应的RO、RW通过DBGU获取FLASH基本信息并进行FLASH基本操作实验的参考程序如#include#include"Board.h"#include"Flash.h"char//*功能名 ://*实验功 :通过DBGU通道发送字符//*参 ://*出口参 :{while(*buffer!='\0')while(!AT91F_US_TxReady((AT91PS_USART)AT91C_BASE_DBGU));}}//*功能名 ://*实验功 :通过DBGU通道接收字//*参 ://*出口参 :{if((AT91F_US_RxReady((AT91PS_USART)AT91C_BASE_DBGU))=={*val=return}}//*功能名 ://*实验功 :通过DBGU通道获得字符//*参 :*type,*//*出口参 :{unsignedintread=0;charbuff[10];unsignedintnb_readwhile((read!=0x0D)&(nb_read!=sizeof(buff)))while((AT91C_BASE_DBGU- //*buff[nb_read]=//*if((char)read=={if(nb_read!=0{nb_read--}}else}}}//*功能名 ://*实验功 :通过DBGU通道发送FLASH起始地址与大//*参 :add//*出口参 :{sprintf(message,"Start0x%Xsize0x%X(%d)\n\r",add,size,size);}//*功能名 ://*实验功 :通过DBGU通道发送字符串,显示FLASH信//*参 :add//*出口参 :{unsignedintunsignedint*start_add=(unsignedint*)add;for(i=0;i<size;{sprintf(message,"At0x%X:0x%X0x%X0x%X0x%X\n\r",&start_add[i],start_add[i],start_add[i+1],start_add[i+2],start_add[i+3]);}}//*功能名 ://*实验功 :通过DBGU通道发送字符串,显示FLASH //*参 ://*出口参 :{if(AT91F_Flash_Lock_Status()!=0)AT91F_DBGU_Printk("LockBitsisset\n\r");if(AT91F_NVM_Status()!=0)AT91F_DBGU_Printk("MVMBitsisset\n\r");if(AT91F_SET_Security_Status()!=0)AT91F_DBGU_Printk("SecurityBitisset\n\r");}//*功能名 //*实验功 :显示调试菜单并进行相应控//*参 ://*出口参 :void{unsignedint*inti,size,page;charval;unsignedint//*size=page=start_add=(unsignedint*)for(i=0;i<FLASH_PAGE_SIZE_LONG*4;i++){buff[i]=//*FLASHdumpwriteErase\n\r6)setSetClearUnlockLock//*while{switch(val){case'1'://*显示FLASH基本信息AT91F_DBGU_Flash((unsignedint)start_add,size);AT91F_DBGU_Printk("Flash case'2'://case'3'://*页操作AT91F_DBGU_scanf("%d",(unsignedint*)&page AT91F_DBGU_Flash((unsignedif(AT91F_Flash_Write((unsignedint)start_add,FLASH_PAGE_SIZE_BYTE,(unsignedint*)&buff))AT91F_DBGU_Printk("FlashelseAT91F_DBGU_Printk("FlashNOTwrite!\n\r");case'4'://*将数据写入FLASH中AT91F_DBGU_Printk("Address(Hex)");start_add=(unsignedint*)size;AT91F_DBGU_Printk("\n\rSizeinbyte(int)");AT91F_DBGU_scanf("%d",(unsignedint*)&sizeif(AT91F_Flash_Write_all((unsignedint)start_add,size,(unsignedint*)&buff))AT91F_DBGU_Printk("Flashwrite\n\r"); AT91F_DBGU_Printk("FlashNOTwrite!\n\r");AT91F_Print_Memory((unsignedint)start_add,(size/4));case5'://*FLASHif(AT91F_Flash_Erase_All())if(AT91F_Flash_Check_Erase((unsignedint*)AT91C_IFLASH,AT91C_IFLASH_SIZE)AT91F_DBGU_Printk("FlashNOTerased!\n\r");case6'://*sprintf(message,"SETMNV10x%X\n\r",AT91F_NVM_Set(1));case7'://*sprintf(message,"SETMNV10x%X\n\r",AT91F_NVM_Clear(1));case'8'://*设置某页锁存位AT91F_DBGU_Printk("Page?:");sprintf(message,"SETlock%d0x%X\n\r",page,AT91F_Flash_Lock(page));case'9'://*清除某页锁存位AT91F_DBGU_Printk("Page?:");sprintf(message,"CLEARlock%d0x%X\n\r",page,AT91F_Flash_Unlock(page));caseA'://*for{sprintf(message,"Clearpage%d0x%X\n\r",i,AT91F_Flash_Unlock(i));}caseB'://*for{sprintf(message,"SETpage%d0x%X\n\r",i,AT91F_Flash_Lock(i));}}//End}//End}包含目标板头文件#include"Board.h"#include"Flash.h"//*功能名 ://*实验功 :FLASH初始//*参 ://*出口参 :{//*FLASH AT91C_MC_FWS_1FWS;}//*功能名 ://*实验功 :等待FLASH//*参 ://*出口参 :{}//*功能名 ://*实验功 :获得非易失性器的状//*参 ://*出口参 :{return(AT91C_BASE_MC->MC_FSR&}//*功能名 ://*实验功 :清除NVM(非易失性器)锁存//*参 ://*出口参 :{//*AT91C_BASE_MC- AT91C_MC_FCMD_UNLOCK|(AT91C_MC_PAGEN&(Flash_Lock_Page<<8));return}//*功能名 ://*实验功 :核实FLASH中的数据是否为at//*参 :*start,//*出口参 :{unsignedintfor(i=0;i<(size/4);i++{ }returntrue}//*功能名 ://*实验功 :擦除FLASH中的全部数//*参 ://*出口参 :{//*设置FLASH控制//*ptMC->MC_FCR=AT91C_MC_CORRECT_KEY|AT91C_MC_FCMD_ERASE_ALL//*}//*功能名 ://*实验功 :将数据写入FLASH//*参 //*出口参 ://* :FLASH起始地址0x0010intAT91F_Flash_Write(unsignedintFlash_Address,intsize,unsignedint*{//*设置Flasc控制unsignedinti,page;unsignedint*//*初始化址指Flash=(unsignedint*)//*FLASH//*{}//*}

//*//*returntrue;//*功能名 ://*实验功 :将数据写入FLASH//*参 //*出口参 ://* :FLASH起始地址0x0010intAT91F_Flash_Write_all(unsignedintFlash_Address,intsize,unsignedint*{ next,unsignedint unsignedint*src;src=buff;status=while((status==true)&(size>0){//*if(size<=FLASH_PAGE_SIZE_BYTE)next=size;elsenext=FLASH_PAGE_SIZE_BYTE; *size-=src+=FLASH_PAGE_SIZE_BYTE/4;dest+= }return}//*功能名 ://*实验功 :获取NVM状//*参 ://*出口参 :{return(AT91C_BASE_MC->MC_FSR&}//*功能名 ://*实验功 :设置NVM(非易失性器)//*参 ://*出口参 :{//*设置FLASH控制字//*ptMC->MC_FCR=AT91C_MC_CORRECT_KEY|AT91C_MC_FCMD_SET_GP_NVM|(AT91C_MC_PAGEN&(NVM_Number<<8));}

//*return//*功能名 ://*实验功 :清除NVM(非易失性器)//*参 ://*出口参 :intAT91F_NVM_Clear(unsignedchar{//*ptMC->MC_FCR=AT91C_MC_CORRECT_KEY|AT91C_MC_FCMD_CLR_GP_NVM|(AT91C_MC_PAGEN&(NVM_Number<<8));return}//*功能名 ://*实验功 :返回NVM(非易失性器)位状//*参 ://*出口参 :{return(AT91C_BASE_MC->MC_FSR&}//*功能名 ://*实验功 :设置NVM(非易失性器)//*参 ://*出口参 :{return}//#include"Board.h"externvoid //*功能名 ://*实验功 ://*参 ://*出口参 :int{//LEDAT91F_PIO_CfgOutput(AT91C_BASE_PIOA,LED_MASK)AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED_MASK)//*PIODBGU//*配置DBGU //DBGUAT91C_US_ASYNC_MODE, //, //((AT91PS_USART)AT91C_BASE_DBGU)->US_CR=AT91C_US_RXEN|AT91C_US_TXEN;}通过中断进行控制LED流水熟悉AT91SAM7S64的基本性能(参照文档硬件:PC 一 一如何在FFT-AT91SAM7S64开发板上运行一说明(PC)属于在PC机上的操作,即的操(硬件 ADS1.2ADS1.2的文档或相关资料3、连接仿真器和FFT-AT91SAM7S64开发1、连接仿真器和FFT-AT91SAM7S64开发板,然后安装仿真器的驱动程序2ADS1.2,建立工程或者AT91SAM7S-Interrupt-ADS_2-1_1工程3、填加启动代码Cstartup.s、Cstartup_SAM7.c以及填加实验程序main.c、4、设置相应的RO、RW(1)#include"Board.h"intstatus_irq=0 : :IRQ0中断服务程//*参 : :void{if(status_irq==0)status_irq=1;elsestatus_irq=0;{AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED2}{AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED2}//*SW3} : //*参 : :void{{}{}

AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED3AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED3}#include"Board.h"//*externint#define #define /*时钟选择 #define #define #define #define #define #define : :初始化TC通道和使能时//*参 :TC_pt,Mode, :voidAT91F_TC_Open(AT91PS_TCTC_pt,unsignedintMode,unsignedint{unsignedint//*//*时钟和中TC_pt->TC_CCR=AT91C_TC_CLKDIS;TC_pt->TC_IDR=0xFFFFFFFF;dummy=TC_pt-//*dummy=//*//*//*} : :定时器0中//*参 : :void{unsignedintdummy=TC_pt-//*由于在后面未用到,防止编译dummy=dummy;//*{}

}{}

AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED3AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED3 : :定时器1中//*参 : :void{unsignedint//*Acknowledgeinterruptstatusdummy=TC_pt->TC_SR;//*Suppresswarningvariable"dummy"wassetbutneveruseddummy=dummy;//*Readtheoutput{}{}}

AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED4AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED4 : :初始化计数//*参 : :voidtimer_init(void{//*0 AT91C_BASE_TC0->TC_IER=AT91C_TC_CPCS;//*打开定时器1 =AT91C_TC_CPCS;AT91F_AIC_Trig(AT91C_BASE_AIC,AT91C_ID_TC1)//*0}#include#define staticconstchar{ ***FFTUsartIRQ"Copyright(C)2004FFTCorporationsVersion:#defineAT91C_US_ASYNC_MODE(AT91C_US_USMODE_NORMAL+AT91C_US_PAR_NONE+\AT91C_US_CHRL_8_BITS+\AT91C_US_CLKS_CLOCK) : :Usart中断服务程//*参 : :void{unsignedint//*Usartif(status&//*AT91F_US_PutChar(USART_pt,}if(status&{AT91F_US_GetChar(USART_pt);}//*if(status&}if(status&}if(status}//*} : //*参 : :voidUsart_init(void{//*AT91F_PIO_CfgPeriph(AT91C_BASE_PIOA,((unsignedint)AT91C_PA5_RXD0 ((unsignedint)AT91C_PA6_TXD0 )|((unsignedint)AT91C_PA7_RTS0 )|((unsignedint)AT91C_PA8_CTS0 //PIOUsartAT91F_US_Configure(COM0,MCK,AT91C_US_ASYNC_MODE,AT91_BAUD_RATE,//AT91F_US_EnableIt(COM0,AT91C_US_TIMEOUT|AT91C_US_FRAME|//*Usart1 AT91F_US_PutChar(COM0,'X');AT91F_US_SendFrame(COM0,(char}(13)#include"Board.h" #define #define #define #define //*intexternvoidexternvoidtimer_init(void);externvoidUsart_init : :中断功//*参 : :void{//*{}{}}

AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED2AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED2 : ://*参 : :voidpio_c_irq_handler(void{int{AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,}{}

AT91F_PIO_SetOutput(AT91C_BASE_PIOA,//*dummy=AT91C_BASE_PIOA-dummy//*SW3} : :等//*参 : :voiddelay(void{volatileunsigned ifor(i=0;(i<WAIT_TIME/50);i++)}:: timer=>//*level=>//*timer=>//*level=>//*=>//*=>//*参 : :intmain(void{unsignedint loop_count; loop_count=0//PIOB//*打开PIO中断,定义SW3IRQ IVE,//*设置中//*IRQ//*IRQ0 ERED,at91_IRQ0_handler);AT91F_AIC_ConfigureIt(pAic,AT91C_ID_SYS,AT91F_AIC_EnableIt(pAic,AT91C_ID_SYS);//*FIQAT91F_AIC_EnableIt(pAic,AT91C_ID_FIQ);//*产生FIQ中//*Usart//*产生中for{AT91F_PIO_ClearOutput(AT91C_BASE_PIOA,LED1delay()AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED1delay();loop_count++;if(loop_count=={//*中}}}实验标题:USB控制熟悉AT91SAM7S64的基本性能(参照文档硬件:PC 一 一如何在FFT-AT91SAM7S64开发板上运行一说明(PC)属于在PC机上的操作,即的操(硬件 ADS1.2ADS1.2的文档或相关资料3、连接仿真器和FFT-AT91SAM7S64开发8、接仿真器和FFT-AT91SAM7S64开发板,然后安装仿真器的驱10 AT91SAM7S-BasicUSB&AD-ADS_2-1_2工程11、填加启动代码Cstartup.s、Cstartup_SAM7.c以及填加实验程序main.c、12、设置相应的RO、RW13 选择[Project]->[Debug],启动AXD进行仿真调试(需要正确设置仿真器 (1)#include"board.h"typedefunsignedcharuchar;typedefunsignedshortushort;typedefunsignedintuint;#defineMIN(a,b)(((a)<(b))?(a):#defineAT91C_EP_IN_SIZE0x40constchardevDescriptor[]={//* // //bcdUSBL //bDeviceClass: CDCclasscode //bDeviceSubclass:CDCclasssubcode //bDeviceProtocol:CDCDeviceprotocol //idVendorL //iManufacturer //iProduct //SerialNumber //{0x09,// // //CwTotalLength2EP+Control //CbNumInterfaces //CiConfiguration //CbmAttributes0xA0 //CMaxPower/*0x09,//0x04,//bDescriptorType0x00,//bInterfaceNumber0x00,//bAlternateSetting0x01,//bNumEndpoints0x02,//bInterfaceClass0x00,//bInterfaceProtocol0x00,//iInterface/*HeaderFunctionalDescriptor*/0x05,//bFunctionLength0x24,//bDescriptortype:CS_INTERFACE0x00,//bDescriptorsubtype:HeaderFuncDesc0x10,//bcdCDC:1.1/*ACMFunctionalDescriptor*/0x04,//bFunctionLength0x24,//bDescriptorType:CS_INTERFACE0x02,//bDescriptorSubtype:ACMFuncDesc0x00,//bmCapabilities/*UnionFunctionalDescriptor*/0x05,//bFunctionLength0x24,//bDescriptorType:CS_INTERFACE0x06,//bDescriptorSubtype:UnionFuncDesc0x00,//bMasterInterface:CommunicationClassInterface0x01,//bSlaveInterface0:D lassInterface/*CallManagementFunctionalDescriptor*/0x05,//bFunctionLength0x24,//bDescriptorType:0x01,//bDescriptorSubtype:CallManagementFuncDesc0x00,//bmCapabilities:D1+D00x01,//bDataInterface: lassInterface/*Endpoint1descriptor*/ //bLength // //bEndpointAddress,Endpoint03-IN //bmAttributes ///*DlassInterfaceDescriptorRequirement*/0x09,//bLength0x04,//bDescriptorType0x01,//bInterfaceNumber0x00,//bAlternateSetting0x02,//bNumEndpoints0x0A,//bInterfaceClass0x00,//bInterfaceSubclass0x00,//bInterfaceProtocol0x00,//iInterface alternatesetting/*Endpoint1descriptor*/ //bLength // //bEndpointAddress,Endpoint01-OUT //bmAttributes ///*Endpoint2descriptor*/ //bLength // //bEndpointAddress,Endpoint02-IN //bmAttributes //wMaxPacketSize //#defineSTD_GET_STATUS_ZERO #defineSTD_GET_STATUS_INTERFACE #define #defineSTD_CLEAR_FEATURE_ZERO #defineSTD_CLEAR_FEATURE_INTERFACE #define #defineSTD_SET_FEATURE_ZERO #defineSTD_SET_FEATURE_INTERFACE #define #define #define #define #define #define #define #define #define /*CDCClassSpecificReqode#define #defineSET_LINE_CODING #define typedefstructcharbCharFormat;charbDataBits;115200,// // // 8uintcurrentReceiveBank=staticucharAT91F_UDP_IsConfigured(AT91PS_CDCstaticuintAT91F_UDP_Write(AT91PS_CDCpCdc,constchar*pData,uintlength);staticvoidAT91F_CDC_Enumerate(AT91PS_CDCpCdc);//*功能名 ://*实验功 :打开//*参 :pCdc,//*出口参 :{pCdc->pUdp=pCdc->currentConfiguration= = pCdc->IsConfigured=AT91F_UDP_IsConfigured; = }//*功能名 ://*实验功 :获得USB设备的句//*参 ://*出口参 :staticucharAT91F_UDP_IsConfigured(AT91PS_CDC{pUDP->UDP_ICR=//resetallpUDP- =-pUDP- =//EnablethepUDP->UDP_FADDR=//配置0}pUDP->UDP_ICR=}

//*功能名 ://*实验功 :从端点OUT读数//*参 :pCdc,*pData,//*出口参 :{uintpacketSize,nbBytesRcv=0,currentReceiveBank=pCdc-while(length)if(pUdp->UDP_CSR[AT91C_EP_OUT]¤tReceiveBank{packetSize=MIN(pUdp->UDP_CSR[AT91C_EP_OUT]>>16,length);length-=packetSize;if(packetSize<AT91C_EP_OUT_SIZE)length=0;while(packetSize--pUdp->UDP_CSR[AT91C_EP_OUT]&=~(currentReceiveBank);currentReceiveBank=AT91C_UDP_RX_DATA_BK1;currentReceiveBank=}}pCdc->currentRcvBank=currentReceiveBank;returnnbBytesRcv;}//*功能名 ://*实验功 :向端点2写数//*参 :pCdc,*pData,//*出口参 :{AT91PS_UDPpUdp=pCdc->pUdp;uintcpt=0;//Send length-=cpt;while(cpt--)pUdp->UDP_FDR[AT91C_EP_IN]=*pData++;while{cpt=MIN(length,AT91C_EP_IN_SIZE);length-=cpt; P) while(pUdp->UDP_CSR[AT91C_EP_IN]& pUdp->UDP_CSR[AT91C_EP_IN]|=AT91C_UDP_TXPKTRDY;}// P) return}//*功能名 ://*实验功 :向控制端点发送数//*参 :pCdc,*pData,//*出口参 :unsignedcharcsrIdx={uintcpt=0;do

cpt=MIN(length,8);length-=cpt;if(pUdp->UDP_CSR[0] }pUdp->UDP_CSR[0]|=docsr=pUdp-} }whileif(pUdp->UDP_CSR[0] }}//*功能名 ://*实验功 :向控制端点发送长度为0的数据//*参 ://*出口参 :voidAT91F_USB_SendZlp(AT91PS_UDP{pUdp->UDP_CSR[0]|=while(!(pUdp->UDP_CSR[0] pUdp->UDP_CSR[0]&=~( }//*功能名 ://*实验功 :停止控制端//*参 ://*出口参 :voidAT91F_USB_SendStall(AT91PS_UDP{}

pUdp->UDP_CSR[0]|=pUdp->UDP_CSR[0]&=~(AT91C_UDP_FORCESTALL|AT91C_UDP_ISOERROR);//*功能名 ://*实验功 :对设备进行枚//*参 ://*出口参 :{ucharbmRequestType,bRequest; |=(pUDP->UDP_FDR[0]<<8); |=(pUDP->UDP_FDR[0]<<8); |=(pUDP->UDP_FDR[0]<<8);pUDP->UDP_CSR[0]|=} & switch((bRequest<<8)|{case //elseifwValue //caseSTD_SET_ADDRESS:pUDP- pCdc->currentConfiguration=wValue;pUDP->UDP_GLBSTATE=(wValue)?AT91C_UDP_CONFG:AT91C_UDP_FADDEN;pUDP->UDP_CSR[1]=(wValue)?(AT91C_UDP_EPEDS|AT91C_UDP_EPTYPE_BULK_OUT):0;pUDP->UDP_CSR[2]=(wValue)?(AT91C_UDP_EPEDS|AT91C_UDP_EPTYPE_BULK_IN):0;wStatus=casewStatus=wStatus=0;wStatus=(pUDP->UDP_CSR[wIndex]&AT91C_UDP_EPEDS)?0:1;AT91F_USB_SendData(pUDP,(char*)&wStatus,sizeof(wStatus));}{wStatus=(pUDP->UDP_CSR[wIndex]&AT91C_UDP_EPEDS)?0:1;AT91F_USB_SendData(pUDP,(char*)&wStatus,sizeof(wStatus));}casecasewIndex&=if((wValue==0)&&wIndex&&(wIndex<={pUDP->UDP_CSR[wIndex]=}casecasewIndex&=if((wValue==0)&&wIndex&&(wIndex<={if(wIndex==pUDP->UDP_CSR[1]=(AT91C_UDP_EPEDS|}

elseif(wIndex== elseif(wIndex==pUDP->UDP_CSR[0]&=~(AT91C_UDP_RX_DATA_BK0);caseAT91F_USB_SendData(pUDP,(char*)&line,MIN(sizeof(line),wLength));casepCdc->currentConnection=wValue;}}#include"board.h"#include"dbgu.h"#include struct //*功能名 ://*实验功 :打开USB设//*参 ://*出口参 :{AT91C_BASE_CKGR->CKGR_PLLR|=AT91C_CKGR_USBDIV_1AT91C_BASE_PMC->PMC_SCER=AT91C_PMC_UDP;//*PIOA16配置为输出IO口模式,并且设置为输出低电平AT91F_CDC_Open(&pCDC,}//*功能名 ://*实验功 :程序//*参 ://*出口参 :intmain(void{charcharmessage[30];unsignedintlength=0;//AT91F_PIO_CfgOutput(AT91C_BASE_PIOA,LED_MASK);//USB//Startwaitingsomecmdwhile(1){if{length=pCDC.Read(&pCDC,pData,{ '5':AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED1);break; '6':AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED2);break; '7':AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED3);break; '8':AT91F_PIO_SetOutput(AT91C_BASE_PIOA,LED4);break;}}}}FLASH烧写程序实实验标题:FLASH烧写实熟悉AT91SAM7S64的基本性能(参照文档硬件:PC 一 一如何在FFT-AT91SAM7S64开发板上运行一说明(PC)属于在PC机上的操作,即的操(硬件

ADS1.2ADS1.2的文档或相关资料3、连接仿真器和FFT-AT91SAM7S64开发16、接仿真器和FFT-AT91SAM7S64开发板,然后安装仿真器的驱18ADS12AT91SAM7S64-DownFlash-ADS1_2-2_0工19flash.c。20、设置相应的RO、RW#include<stdio.h>#include#include"flash.h"#include "SAM7"unsignedint

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论