已阅读5页,还剩114页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
纳米阻抗显微镜的研制及其应用硬件层模块数量函数名参数返回值功能AD6InitADvoidint初始化AD模块AD_ReadChannelsint,int,int*,int*int对多路AD进行采样AD_ReadChannelint,intint对某一AD通道采样AD_SetInputRangeintint设置AD的采样电压范围AD_SelChannelintint选择采样的AD通道GetAD_Statusvoidint查询AD模块的状态DA3InitDAvoidint初始化DA模块DA_WriteChannelint,intint输出某一DA通道的电压GetDA_Statusvoidint查询DA模块的状态DIO5InitDIOvoidint初始化DIO模块DO_WriteChannelint,intint设置某一路DO的逻辑电平DO_WriteChannelsUint32*int设置多路DO的逻辑电平DI_ReadChannelintint采样某一路DI的逻辑电平DI_ReadChannelsUint16*int采样所有DI的逻辑电平通讯5InitHostCommPortvoidint初始化HPIOnCommandvoidvoidHINT中断调度ReadCommandvoidint读命令ReadHostDataint,Uint16*int读PC发送的数据WriteHostDataint,Uint16*int向PC机发送数据others6FeedBackLED_ONvoidvoid开反馈指示灯FeedBackLED_OFFvoidvoid关反馈指示灯ScanLED_ONvoidvoid开扫描指示灯ScanLED_OFFvoidvoid关扫描指示灯ApproachLED_ONvoidvoid开逼近指示灯ApproachLED_OFFvoidvoid关逼近指示灯硬件层程序/* Copyright (C) 2007 Zhongshan University.* All Rights Reserved*-* FILENAME. CSPM_DSP_Driver.c* DATE CREATED. 013/4/2007* LAST MODIFIED. 025/4/2007*/* CSPM_DSP_Driver Module is the hardware function layer of CSPM. It contains * five module.*AD.5 Functions*DA.3 Functions* DIO.5 Funcitons*Comunicaiton.5 Functions* LED.8 Functions*/#include dsk6416cfg.h#include #include #include #include #include /*-Definition-*/#define DIO_SUCCEED 1#define DIO_FAILURE 0#define DA_SUCCEED 1#define DA_FAILURE 0#define AD_SUCCEED 1#define AD_FAILURE 0#define COMM_INIT_SUCCEED 1#define COMM_INIT_FAILURE 0#define DATA_READ_SUCCEED 1#define DATA_READ_FAILURE 0#define DATA_WRITE_SUCCEED 1#define DATA_WRITE_FAILURE 0GPIO_Handle hGpio0;GPIO_Config gpioCfg0 = 0x00001E00, /* GPIO Global Control Register (GPGC) */0x0000FFFF, /* GPIO Enable Register (GPEN) */0x0000FFFF, /* GPIO Direction Register (GPDIR)*/ 0x00000000, /* GPIO High Mask Register (GPHM)*/ 0x00000000, /* GPIO Low Mask Register (GPLM)*/ 0x00000000 /* GPIO Interrupt Polarity Register (GPPOL)*/;void InitGPIO(void);/*AD Module*/#define MAX_AD_BUFFER_SIZE 10240; #define AD_INPUT_RANGE_PN_5 0 / -5v to +5v#define AD_INPUT_RANGE_P_5 1 / 0v to +5v#define AD_INPUT_RANGE_PN_10 2 / -10v to +10v#define AD_INPUT_RANGE_P_10 3 / 0v to 10vUint16 AD_Config = 0x0300; /Uint16 AD_Config = 0x8000; /* Bit 15 : SGL or DIFF Bit 13-12: select channel Bit 11-10: input range Bit 9-8: power down select */int GlobalEnableChannelNo16;int GlobalEnableChannelCount = 0;int GlobalTotalSampleCount = 0; /* Record the total numbers of AD convertion */int GlobalChip1ChannelEnableCount = 0;int GlobalChip2ChannelEnableCount = 0;int AD_Count = 0; static int ScanMode = 0; / Current AD convertion countint InitAD(void);int AD_ReadChannels(int InputRange,int ChannelEnable, /bit 0 to 7 enable channel int * SampleCountPerChannel,Uint16 * AD_Buffer); /* Read multiple AD datas form channels. */Uint16 AD_ReadChannel(int InputRange, int ChannelNo); /* Read sigle data from AD ch- annel. */int AD_SetInputRange(int InputRange);int AD_SelChannel(int ChannelNo);int GetAD_Status(void); /*DA Module*/int InitDA(void);int DA_WriteChannel(int ChannelNo, Uint16 Value);int GetDA_Status(void);/*DIO Module*/Uint32 DO_Data2;Uint16 DI_Data;int InitDIO(void);int DO_WriteChannel(int ChannelNo, int Data);int DO_WriteChannels(Uint32 * Data);int DI_ReadChannel(int ChannelNo);int DI_ReadChannels(Uint16 * Data);/*Communication Module*/#define MAX_BUFFER_RECEIVE_SIZE 10240#define MAX_BUFFER_SEND_SIZE 514#define BLOCK_SIZE 256Uint16 far BufferReceiveMAX_BUFFER_RECEIVE_SIZE;Uint16 far BufferSendMAX_BUFFER_SEND_SIZE;Uint16 HasCommand = 0;interrupt void OnCommand();IRQ_Config HostIrqConfig = OnCommand,0x00000000,IRQ_CCMASK_PCC_ENABLE | IRQ_CCMASK_DCC_MAPPED,IRQ_IEMASK_ALL;int InitHostCommPort(void);interrupt void OnCommand(void);int ReadCommand(void);int ReadHostData(int WordNos ,Uint16 Comm_Buffer); /* Read a number of datas fr- om Mail-Box. Max numbers of datas read from Mail-Box is 256. */int WriteHostData(int WordNos, Uint16 Comm_Buffer); /* Write a number of datas to Mail-Box and sent them to the host. Max numbers of datas can mord than 256 . The Function can auto deal with the sendings po- rssese. */ /*-Declearation-*/void InitGPIO(void)hGpio0 = GPIO_open(GPIO_DEV0,GPIO_OPEN_RESET);GPIO_config(hGpio0, &gpioCfg0);/*AD Module*/int InitAD(void)PRD_stop(&PRD_AD);MCBSP_start(hMcbsp0,MCBSP_RCV_START | MCBSP_XMIT_START | MCBSP_SRGR_START| MCBSP_SRGR_FRAMESYNC, 0);return AD_SUCCEED;Uint16 * Buffer;int AD_ReadChannels(int InputRange, int ChannelEnable, int * SampleCountperChannel, Uint16 AD_Buffer)int i = 0,j = 0,k = 0,l = 0,Data,num = 0,tmp=0;AD_SetInputRange(InputRange);for(i=0;i16;i+)GlobalEnableChannelNoi=i;Buffer = AD_Buffer;k=400;while(k!=0) k-;for(j=0;j=16;j+=2)l=j;if(j=16) l=0;num=GlobalEnableChannelNol;AD_SelChannel(num);for(i=0;i0) & (AD_Count!=GlobalChip1ChannelEnableCount) | (GlobalEnableChannelCount=GlobalChip1ChannelEnableCount)if(AD_Count%GlobalEnableChannelCount = 0) | (AD_Count%GlobalEnableChannelCount = GlobalChip1ChannelEnableCount) & (GlobalEnableChannelCount != GlobalChip1ChannelEnableCount)while (!MCBSP_rrdy(hMcbsp0);BufferAD_Count-GlobalEnableChannelCount = MCBSP_read(hMcbsp0);elseif(AD_Count8)AD_Count = 0;PRD_stop(&PRD_AD);/*AD_CONFIG*Config word length:16 bitsD15:SGL/DIFF (D15=1:Single-Ended;D15=0:Differential-Ended);D14/13/12:Select channel0-7000:channel 0001:channel 2010:channel 4011:channel 6100:channel 1101:channel 3110:channel 5111:channel 7D11/10:Input Range00: -5V TO +5V10: 0V TO +5V01: -10V TO +10V11: 0V TO +10VD9/D8:Power Down Selection00: power on10: Napx1: SleepD7/6/5/4/3/2/1/0: Reserved(Not Used)NOTE:Config Word need to invert because of the 74HC14*AD_CONFIG*/Uint16 AD_ReadChannel(int InputRange, int ChannelNo)Uint16 Data;AD_SetInputRange(InputRange);AD_SelChannel(ChannelNo);/*while (!MCBSP_xrdy(hMcbsp0); MCBSP_write(hMcbsp0,AD_Config); Data = MCBSP_read(hMcbsp0);*/while (!MCBSP_xrdy(hMcbsp0); MCBSP_write(hMcbsp0,AD_Config); Data = MCBSP_read(hMcbsp0);return Data;int AD_SetInputRange(int InputRange)if(InputRange = AD_INPUT_RANGE_PN_5)AD_Config &= 0xF300;AD_Config |= 0x0C00; /xiaoxin add here,in order to invert;else if(InputRange = AD_INPUT_RANGE_P_5)AD_Config &= 0xF300;AD_Config |= 0x0400;else if(InputRange = AD_INPUT_RANGE_PN_10)AD_Config &= 0xF300;AD_Config |= 0x0800;else if(InputRange = AD_INPUT_RANGE_P_10)AD_Config &= 0xF300;/AD_Config |= 0x0C00;return AD_SUCCEED; int AD_SelChannel(int ChannelNo)Uint8 * RegHcntl = (Uint8 *)0x60000001;int TempChannelNo = 0;if(ChannelNo 8)/*RegHcntl &= 0xFFFC;/set CS bit = 0 (xiaoxin Cancel here)*RegHcntl |= 0x0002;/set CS bit = 1;(xiaoxin add here in order to invert;)/GPIO_pinWrite(hGpio0,GPIO_PIN9,1);/AD_CS0 change to AD_CS2(by zwen 2010-5-22)elseChannelNo -= 8;/*RegHcntl |= 0x0003;/set CS bit = 1;(xiaoxin Cancel here)*RegHcntl &= 0xFFFD;/set CS bit = 0 (xiaoxin add here in order to invert;)/GPIO_pinWrite(hGpio0,GPIO_PIN9,0);/AD_CS0 change to AD_CS2(by zwen 2010-5-22)TempChannelNo = ChannelNo&0x0001; TempChannelNo = TempChannelNo1;ChannelNo |= TempChannelNo;ChannelNo =7-ChannelNo;/xiaoxin add here,in order to invert;AD_Config &= 0x8FFF;AD_Config |= ChannelNo12;return AD_SUCCEED;int GetAD_Status(void)return AD_Count;/*DA Module*/int InitDA(void)MCBSP_start(hMcbsp2,MCBSP_RCV_START | MCBSP_XMIT_START | MCBSP_SRGR_START| MCBSP_SRGR_FRAMESYNC, 0);return DA_SUCCEED;int DA_WriteChannel(int ChannelNo, Uint16 Value) int Delay = 400;unsigned int x = 0; Uint16 DA_CS;if(ChannelNo 4)DA_CS = 0x0000;else if(ChannelNo 8)DA_CS = 0x0400;ChannelNo -= 4;else if(ChannelNo 12)DA_CS = 0x1000;ChannelNo -= 8;elseDA_CS = 0x1400;ChannelNo -= 12;/ChannelNo =3-ChannelNo;/invertedx = 65535-Value;/inverted/Value |= ChannelNo22;ChannelNo = 3-ChannelNo;x |= ChannelNo22;x |= 0x200000;/Value |= 0x900000;GPIO_write(hGpio0, GPIO_PIN12|GPIO_PIN10, DA_CS);MCBSP_FSET(PCR2, FSRP, 0);MCBSP_FSET(PCR2, CLKRP, 1); while (!MCBSP_xrdy(hMcbsp2); MCBSP_write(hMcbsp2, x); while(Delay!=0)Delay-; MCBSP_FSET(PCR2, FSRP, 1);MCBSP_FSET(PCR2, CLKRP, 0); MCBSP_setPins(hMcbsp2,MCBSP_PIN_FSR); MCBSP_setPins(hMcbsp2,MCBSP_PIN_CLKR);return DA_SUCCEED;/*DIO Module*/int GetDIO_Status(void)return DIO_SUCCEED;int InitDIO(void)MCBSP_start(hMcbsp1,MCBSP_RCV_START | MCBSP_XMIT_START | MCBSP_SRGR_START| MCBSP_SRGR_FRAMESYNC, 0);return DIO_SUCCEED;int DO_WriteChannel(int ChannelNo, int Data)int Delay = 100;Uint32 Temp_DO_Data;/Uint32 Temp_DI_Data;int address;int DO_Data_OUT;address=ChannelNo/8;address=7-address;/invertedaddress=address8;if(ChannelNo 32)if(!Data)Temp_DO_Data = 0x00000001;DO_Data0 |= Temp_DO_DataChannelNo;elseTemp_DO_Data = 0xFFFFFFFE;Temp_DO_Data=Temp_DO_Data(ChannelNo/8*8); /*ChannelNo 7-0 NO need to right shift;ChannelNo 15-8 need to right shift 8 bits;ChannelNo 23-16 need to right shift 16 bits;ChannelNo 31-24 need to right shift 24 bits;*/DO_Data_OUT=255-DO_Data_OUT;/invertedDO_Data_OUT=DO_Data_OUT+address;elseif(!Data)Temp_DO_Data = 0x00000001;DO_Data1 |= Temp_DO_Data(ChannelNo-32);elseTemp_DO_Data = 0xFFFFFFFE;Temp_DO_Data=Temp_DO_Data(ChannelNo-32)/8*8);/*ChannelNo 39-32 NO need to right shift;ChannelNo 47-40 need to right shift 8 bits;ChannelNo 55-48 need to right shift 16 bits;ChannelNo 63-40 need to right shift 24 bits; */DO_Data_OUT=255-DO_Data_OUT;/invertedDO_Data_OUT=DO_Data_OUT+address;while(!MCBSP_xrdy(hMcbsp1); MCBSP_write(hMcbsp1, DO_Data_OUT); /*DO_Data_OUT:12 bits; DO_Data_OUT 11 :reserve; DO_Data_OUT 10-8: address 2-0; DO_Data_OUT 7-0: 8 bits send data; */ /*CASE (address 2-0) 000:DO 7-0; 001:DO 15-8; 010:DO 23-16; 011:DO 31-24; 100:DO 39-32; 101:DO 47-40; 110:DO 55-48; 111:DO 63-56; */while(Delay!=0)Delay-;while(!MCBSP_rrdy(hMcbsp1); DI_Data= MCBSP_read(hMcbsp1); /*12 bits DI DATA:DI 16-8 AND DI 3-0 */DI_Data =Temp_DI_Data4;/Temp_DI_Data&=0x000F;/DI_Data=0xFFFF-DI_Data;/DI_Data&=0xFF00;/DI_Data+=Temp_DI_Data+0x00F0; /*ADD DI 7-4 TO READ DATA BY VALUE ALL 1 */while(Delay!=0)Delay-;return DIO_SUCCEED; int DO_WriteChannels(Uint32 * Data)int Delay = 400;int Index;int address;int DO_Data_out;/Uint16 Temp_DI_Data;DI_Data = 0;DO_Data0=4294967295-Data0;DO_Data1=4294967295-Data1;for(Index = 0; Index8; Index+)address=7-Index; /invertedaddress=address8;if(Index(Index*8);DO_Data_out=DO_Data_out+address;elseDO_Data_out=0x000000FF&(DO_Data1(Index-4)*8);DO_Data_out=DO_Data_out+address;while(!MCBSP_xrdy(hMcbsp1); MCBSP_write(hMcbsp1, DO_Data_out); while(Delay!=0)Delay-; while(!MCBSP_rrdy(hMcbsp1);DI_Data= MCBSP_read(hMcbsp1);/*Temp_DI_Data= MCBSP_read(hMcbsp1);DI_Data =Temp_DI_Data4;Temp_DI_Data&=0x000F;DI_Data=0xFFFF-DI_Data;DI_Data&=0xFF00;DI_Data+=Temp_DI_Data+0x00F0;*/while(Delay!=0)Delay-;return DIO_SUCCEED;int DI_ReadChannel(int ChannelNo)int Delay = 400;int DO_Data_OUT;/Uint16 Temp_DI_Data;DI_Data = 0;DO_Data_OUT=0x000000FF&DO_Data0;DO_Data_OUT |=0x00000700;/invertedwhile(!MCBSP_xrdy(hMcbsp1); MCBSP_write(hMcbsp1, DO_Data_OUT); while(Delay!=0)Delay-; while(!MCBSP_rrdy(hMcbsp1);DI_Data= MCBSP_read(hMcbsp1);/*Temp_DI_Data= MCBSP_read(hMcbsp1);DI_Data =Temp_DI_DataChannelNo)&0x0001;int DI_ReadChannels(Uint16 * Data)int Delay = 400;int DO_Data_OUT;/Uint32 Temp_DI_Data;DI_Data = 0;DO_Data_OUT=0x000000FF&DO_Data0;DO_Data_OUT |=0x00000700;/invertedwhile(!MCBSP_xrdy(hMcbsp1); MCBSP_write(hMcbsp1, DO_Data_OUT); while(Delay!=0)Delay-; while(!MCBSP_rrdy(hMcbsp1);DI_Data= MCBSP_read(hMcbsp1);/*Temp_DI_Data= MCBSP_read(hMcbsp1);DI_Data =Temp_DI_Data4;Temp_DI_Data&=0x000F;DI_Data= 0xFFFF-DI_Data;DI_Data&=0xFF00;DI_Data+=Temp_DI_Data+0x00F0; */while(Delay!=0)Delay-;*Data = DI_Data;return DIO_SUCCEED;/*Communication Module*/int InitHostCommPort(void)int old_intm;HPI_FSET(HPIC,HWOB,1);HPI_setWriteAddr(Uint32)BufferReceive/4);HPI_setReadAddr(Uint32)BufferSend/4);old_intm = IRQ_globalDisable();/IRQ_map(IRQ_EVT_DSPINT,15);IRQ_map(IRQ_EVT_DSPINT,13);IRQ_config(IRQ_EVT_DSPINT,&HostIrqConfig);IRQ_clear(IRQ_EVT_DSPINT);IRQ_enable(IRQ_EVT_DSPINT);IRQ_globalRestore(old_intm);IRQ_globalEnable();return COMM_INIT_SUCCEED;int ReadCommand(void)return (int)BufferReceive0;int ReadHostData(int WordNos
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- AI赋能元宇宙:场景搭建的技术与实践
- 2026年中国灵活用工市场求职者保障与平台责任
- 2026年公众急救培训课程教学大纲
- AI在新能源船舶技术中的应用
- 2026年幼儿园夏季幼儿饮水管理
- 2026年骨折固定与搬运技能培训
- 2026年应急通信设备操作人员培训大纲
- 2026年初中地理自然地理专题讲座
- 2026年重大突发公共卫生事件中谣言传播机制与治理
- 上海立达学院《Android 移动端系统开发》2025-2026学年第一学期期末试卷(B卷)
- 2026云南曲靖市沾益区高投物业服务有限公司物业工作人员招聘6人笔试模拟试题及答案解析
- GB/Z 177.7-2026人工智能终端智能化分级第7部分:汽车座舱
- 成都湔江投资集团有限公司2026年春季第一批次招聘考试参考题库及答案解析
- 2026四川泸州金桂投资有限公司第一批次招聘26人备考题库附答案详解(完整版)
- 2026浙江宁波市北仑区残疾人联合会招聘编外用工1人笔试备考试题及答案详解
- 2026年高考物理终极冲刺:专题12 动量守恒定律及其应用(二大题型)原卷版
- 恒丰银行北京分行社会招聘笔试模拟试题及答案解析
- 2026西藏中考语文查缺补漏专练含答案
- 学校出入境请假审批制度
- 2026年江苏省宿迁市中考物理一模试卷(含答案)
- 2025年纪委面试真题及参考答案
评论
0/150
提交评论