




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、纳米阻抗显微镜的研制及其应用spm 程序(ccs)硬件层块数函数名参数返回4g功能initadvoidint初始化ad模 块ad_readchannelsint,int,iint对多路ad进 行采样a6ad_readchannelintentint对某一 ad通 道采样dad_setinp utrangeintint设置ad的采 样电压范围ad_selchannelintint选择采样的ad 通道getad_statusvoidint查询ad模块 的状态纳米阻抗显微镜的研制及其应用da_writechannelintjntint输出某一 da 通道的电压getda statusvoidint查
2、询da模块 的状态dio5initdiovoidint初始化dio模块do_writechannelintentint设置某一路do 的逻辑电平do_write channelsuint32*int设置多路do 的逻辑电平dlreadc hannelintint采样某一路di 的逻辑电平di_readc hannelsuintl6*int采样所有di的 逻辑电平通讯5inithostco mmportvoidint初始化hpioncomma ndvoidvoidhint中断调readcom mandvoidint读命令readhostdataint,uint 16*int读pc发送的数 据wr
3、itehostdataint,uint16*int向pc机发送数 据othe6feedbackled_onvoidvoid开反馈指示灯5纳米阻抗显微镜的研制及其应用rsfeedbackled_offvoidvoid关反馈指示灯scanled_onvoidvoid开扫描指示灯scanled_offvoidvoid关扫描指示灯approach led_onvoidvoid开逼近指示灯approachled_offvoidvoid关逼近指示灯硬件层程序/*京*木*京*、 *copyright (c) 2007 zhongshan university.*all rights reserved fil
4、ename. cspm_dsp_driver.c date created. 013m/2007 last modified. 025/4/2007*京*今*/*宏*宏*、* cspm dsp driver module is the hardware function laver of cspm. it contains* five module.ad.da.dio.5 functions3 functions5 funcitoiiscomunicaiton5 functionsled,8 functions*/include mdsk6416cfg.hm纳米阻抗显微镜的研制及其应用#inc
5、lude #include #include include #include 产dehnition/# define dio_succeed1# deflne dio_failure0# define da.succeed1#define da.failure0#defineadsucceed1#definead_failure0# define comm jnit-succeed1# define comm jnitemlure0# define data_read_succeed1# define data.read.failure0# dehne data_write_succeed
6、1# dehne data.writefailure 0gpio_handle hgpioo:gpioconfig gpiocfgo = 0x00001 e00, oxooooffff, oxooooffff, 0x00000000, 0x00000000, 0x00000000/* gpio globa) control register (gpgc) /* gpio enable register (gpen) */* gpio direction register (gpdir)*/华 gpio high mask register (gphm)*/* gpio low mask reg
7、ister (gplm)*/产 gpio interrupt polarity register (gppol)*/;void initgpio(void);ad module*/#define max_ad_buffer_size 10240;#defineadnput_range_pn_5 0#deflne ad_input_range_p 1#deflne adnput_range_pk_10 2#defineadnput_range_p_10 3uintl6 ad_config = 0x0300;/uintl6ad_config = 0x8000;/ -5v to +5v/ ov to
8、 +5v /-10v to+lov/ ov to lovint globa)enablechannelno 16;int globalenablechannelcount = 0;int globaltotalsamplecount = 0:int globalchiplchannelenablecount = 0;int globalchiplchannelenablecount = 0;int ad_count = 0;产 bit 15 :sglor diff bit 13-12: select channel bit 11-10: input range bit 9-8: power d
9、own select*/* record the total numbers of ad convertion11static int scanmode = 0;/ current ad convertion countint initad(void);int 44d_readchannels(int inputrange./bit 0 to 7 enable channelint channelenableint * sainplecountperchanneluintl6 ad_buffer);/* read multiple ad datas formchannels. /uintl6
10、ad_readchannel(int inputrange, int channelno); /* read sigle data from ad channel. */int ad_setinputrange(int inputrange);int ?kd_selchannel(int channelno);int getad_status(void);/da module*/int initda(void);int da_writechannel(int channelno, uintl6 value);int getda_status(void);产dio module*/uint32
11、do_data2;uintl6 di_data;int initdio(void):int do3vritechannel(int channel、。,int data):int do_vvritechannels(uint32 * data);int di.readchannekint channelno);int dlreadchannels(uint 16 * data);/*communication module*/#dehne max_buffer_receive_size 10240#deflne max_buffer_send_size 514#deflne block.siz
12、e 256uintl6 far bufferreceivemax_buffer_receivesizel;uintl6 far buffersendmax_buffer_send_size;uintl6 hascoinmand = 0;interrupt void oncomniando;irq_config hostlrqconfig = onconiniand.0x00000000,irq_ccmask_pc_enable i irq_ccmask_dcc_mapped, irq_iemask_all ;int inithostcommport(void);interrupt void o
13、ncomniand(void);int readcominand(void);int readhostdata(int wordnos ,uintl6 connn_buffer); /* read a number of datas from mail-box. max numbers of datas read from mail-box is 256. */int writehostdata(int wordnos, uintl6 connn_buffer); /* write a number of datasto mail-box and sent them to the host.
14、max numbers of datas can inord than 256 , the function can auto deal with the sendings po- rssese. */*declearation*/void initgpio(void) (hgpioo = gpio_open(gpio_devo,gpio_open_reset);gpio_config(hgpi0, &gpiocfgo);/*ad module*/ int initad(void) (prd_stop(&prd_ad);mcbspstart(hmcbspoaicbsp_rcv_start i
15、mcbsp_xmit_start i mcbsp_srgr_startimcbsp_srgr_framesync, 0);return ad_succeed;)uintl6 * buffer;int ?kd_readchannels(int inputrange. int channelenable int * samplecountperchannek uintl6 ad_bufferl)(int i = 0j = 0,k = 0,1 = o.datajwm = 0,tmp=0:ad_setlnputrange(inputrange);for(i=0;i16;i+)globalenablec
16、hannelnoi=i:buffer = ad_buffer;k=400;while(k!=0) k-;for(j=0:j=16;j+=2)if(j=16) 1=():num=globalenablechannelnol;ad_selchannel(num);for(i=0;i0) & (ad_count!=globalchiplchannelenablecount) ii (globalenablechannelcountglobalchiplchannelenablecount)(if(ad_count%globalenablechannelcount = 0) ii (ad.count%
17、globalenablechannelcount = globalchiplchannelenablecount) & (globalenablechannelcount != globalchiplchannelenablecount)while (!mcbsp_rrdy(hmcbspo);bufferad_count-globalenablechannelcount = mcbsp_read(hmcbspo);)elseif(ad_count8)ad_count = 0;prd_stop(&prd_ad);/*今*今*衣*今*/*ad config*config word length:
18、16 bitsd15:sgivdiff (d15=l:single-ended:d15=0:differential-ended);d14/13/12:select channelo-7oooxhannel 0001:channel 2010:channel 4olkchannel 6100:channel 1101:channel 3110:channel 5llkchannel 7dll/10:input range()0: -5vto +5v10: ovto +5v01:.10vto+1()v11:0v to+10vd9/d8:power down selection00: power
19、on10: napxl: sleepd7/6/5/4/3/2/1/0: reserved(not used)note:config word need to invert because of the 74hc14*4:*ad config*/uintl6 ad_readchannel(int inputrange, int channelno)uintl6 data;ad_setinputrange(inputrange);ad_selchannel(channelno);while (!mcbsp_xrdy(hmcbspo);mcbsp_write(hmcbsp(had_config);d
20、ata = m cbsp_read( hmcbspo) ;*/while (!mcbsp_xrdy(hmcbspo);mcbsp_write(hmcbspoad_config);data = mcbsp_read(hmcbspo);return data;int ad_setinputrange(int inputrange) (ifdnputrange = ad/nput_range_pn_5)(ad.config &= 0xf3(m);ad_config 1= oxocoo;/xiaoxin add herejn order to invert;)else ifdnputrange = a
21、d_i、put_range_p_5) (ad_config &= 0xf300;ad_config 1= 0x040():else ifdnputrange = ad_input_range_pn_10) (ad_config &= 0xf300;ad_conhg 1= 0x080():else ifdnputrange = ad_input_r.nge_p_10)(ad_conhg &= 0xf3(m);/ad_config 1= oxocoo;return ad_succeed;int ad_selchannel(int channelno) (uint8 * reghcntl = (ui
22、nt8 *)0x60000001;int tempchannelno = 0:if( channelno 8)(/*reghcntl &= oxfffc; /set cs bit = 0 (xiaoxin cancel here)*reghcntl 1= 0x0002; /set cs bit = 1;(xiaoxin add here in order to invert;)gpio_pinwrite(hgpioo.gpio_pin9,l)wad_cso change to ad_cs2(bv zwen 2010-5-22) else (channelno -= 8;/*reghcntl 1
23、= 0x0003;/set cs bit = l;(xiaoxin cancel here)*reghcntl &= oxfffd; /set cs bit = 0 (xiaoxin add here in order to invert;)gpio_pinvrite(hgpioo.gpio_pin9,0);/ad_cso change to ad_cs2(bv zwen 2010-5-22) )tempchannelno = channelno&oxoool;tempchannelno = tempchannelno2:channelno = channelnol;channelno 1=
24、tempchannelno;channelno =7-channelno;/xiaoxin add herejn order to invert;ad_config &= oxsfff;ad_config 1= channelno12;return ad_succeed;纳米阻抗显微镜的研制及其应用int getad_status(void) (return ad_count;/*da module*/int initda(void)(mcbsp_start(hmcbsp2afcbsp_rcv_start i mcbsp_xmit_start i mcbsp_srgr_starti mcbsp
25、_srgr_framesync, 0);return da_succeed;int da_writechannei(int channelno, uintl6 value) (int delay = 400;unsigned int x = 0;uintl6 da_cs;if(channelno 4)(da_cs = 0x0000;)else if(channelno 8)(da_cs = 0x(m00:channelno -= 4;else if(channelno 12)(da_cs = 0x1000:channelno -= 8;else(da_cs = 0x1400:channelno
26、 -= 12;/ channelno =3-channelno; /invertedx = 65535-value; /inverted/ value 1= channelno22;channelno = 3-channelno;x 1= channelno22;x0x200000;/ value 1= 0x900000;gpio_write(hgpioo, gpio_pin12igpio_pin10, da_cs);mcbsp_fset(pcr2, fsrr 0);mcbsp_fset(pcr2, clkrr 1);while (!mcbsp_xrdy(hmcbsp2);mcbsp_writ
27、e(hmcbsp2, x);while(delay!=0)delay-;mcbsp_fset(pcr2, fsrp, 1);mcbsp_fset(pcr2, clkrr 0);mcbsp_setpiiis(hmcbsp2aicbsp_pin_fsr);mcbsp_setpiiis(hmcbsp2,mcbsp_pin_clkr); return da.succeed;)产dio module*/int getdio_status(void) (return dio_succeed:)int initdio(void)(mcbsp_start(hmcbsphmcbsp_rcv_starti mcb
28、sp_xmit_start i mcbsp_srgr_starti mcbsp_srgr_framesync, 0);return dio_succeed;)int do_vvritechannel(int channel、。,int data)(int delay = 10():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
29、) (temp_do_data = 0x00000001;do_data0 1= temp_do_datachannelno;) else(temp_do_data = oxfffffffe;temp_do_data=temp_do_datachannelno;temp_do_data=teinp_do_data+pow(2,channelno); temp_do_data=teinp_do_data-l;do_data0 &= temp_do_bata; )do_data_out=oxoo(mh)off&(do_data0(channelno/8t8); /*channelno 7-0 no
30、 need to right shift:channelno 15-8 need to right shift 8 bits:channel。23-16 need to right shift 16 bits;channelno 31-24 need to right shift 24 bits;/do_data_out=255-do_data_out; /inverted do_data_out=do_data_out+address;else(if(!data)(temp_do_data = 0x00000001;do_datal 1= temp_do_data(channelno-32)
31、;)else纳米阻抗显微镜的研制及其应用temp_do_data = oxfffffffe;temp_do_data=temp_do_data(channelno-32);temp_do_data=temp_do_data+pow(2jchannelno-32);temp_do_data=temp_do_data-l;do_datal &= temp_do_data;do_data_out=oxoo(mm)off&(do_datal(channelno-32)/8*8)channelno 39-32 no need to right shift;channelno 47-40 need to
32、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_ouf+address;while(!mcbsp_xrdy(hmcbspl);mcbspwrite(hmcbspl, do_data_out);/*do_data_out:12 bits;do_data_out 11:reserve;do_data_out 10-8
33、: 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(hmcbspl);di_data= mcbsp_read(hmcbspl);/*12 bits di data:di 16-8 and di 3-0/di_data =temp_d
34、i_data4;/temp_di_data&=0x000f;/di_data=0xffff-di_data;/di_data&=0xff()0;/*add di 7-4 to*/di_data+=temp_di_data+0x00f();read data by value all 1while( delay !=0)delay-;return dio_succeed;int do_writechannels(uint32 data) (int delay = 400;intindex;int address;int do_data_out;/hint 16 teinp_di_data;di_
35、data = 0;do_data(0=4294967295-data0;do_datal 1=4294967295-datal;for(i nd ex = 0: index8; index+) |address=7-index; /invertedaddress=address8;if(index4) (do_data_out=oxoo(m)ooff&(do_data0(index*8);do_data_out=do_data_out+address;) else(do_data_out=oxoo(x)ooff&(do_datal(index-4)*8);do_data_out=do_data
36、_out+address;)while(!mcbsp_xrdy(hmcbspl);mcbsp_write(hmcbsp 1, do_data_out);while( delay !=0 )delay-;while(!mcbsp_rrdy(hmcbspl);di_data= mcbsp_read( hmcbsp 1);/*tinp_di_data= mcbsp_read(hmcbspl);di_data =temp_di_data4;temp_di_data &=0x000f;di_data=()xffff-di_data;di_data&=0xff00;di_data+=temp_di_dat
37、a+()x00f0;*/while(delav!=o)delay-;)return dio_succeed: int di.readchannekint channelno) (int delay = 400;int do_data_out;/uintl6 temp_di_data;di_data = 0;do_data_out=oxoo(mh)off&do_data0; do.data.out 1=0x00(x)0700; /inverted whue(!mcbsp_xrdy(hmcbspl);mcbsp_write(hmcbspl, do_data_out);while( delay !=
38、0 )delay-;while(!mcbsp_rrdy(hmcbspl);di_data= mcbsp_read( hmcbsp 1); /*lmp_di_data= mcbsp_read(hmcbspl);di_data =teinp_di_data4;temp_di_data &=0x0()0f; di_data=oxffff-di_data: di_data&=0xff00;di_data+=temp_di_data+0x()0f0;*/ while(delay!=()delay-;return (di_datachannelno)&0x00() 1;int di_readchannel
39、s(uintl6 * data)int delay = 400;int do_data_out;/uint32 temp_di_data;di.data = 0;do_data_out=ox(m)ooooff&do_data0;do_data_out 1=0x00000700; /invertedwhile(!mcbsp_xrdy(hmcbspl);mcbsp_write( hmcbsp 1, do_data_out);while( delay!=0 )delay-;while(!mcbsp_rrdy(hmcbspl);di_data= mcbsp_read(hmcbspl);/*temp_d
40、i_data= mcbsp_read(hmcbspl);di_data =tmp_di_data4;teinp_di_data &=0x000f;di_data= oxffff-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 oldjntm;hplfset(hpic,hwob,1);hpi_set
41、vvriteaddr(uint32)bufferreceive/4);hpi_setreadaddr(uint32)buffersend/4);old_intm = irq_globaldisable(); /irq_inap(irq_evt_dspint,15);irq_inapdrq_evt_dspint43);irq_config(irq_evt_dspint,&hostirqconfig);irq_clear(irq_evt_dspint);irq_enable(irq_evtdspint);irq-globalrestore(oldjntm);i rq_globaleiia ble(
42、);return comm init succeed;)int readcoinmand(void) (return (int)bufferreceive(o;)int readhostdata(int wordnos ,uintl6 comm_buffer) (intindex;ford nd ex = 0: index wordnos; index+) (comm_bufferindex = bufferreceiveindex+2; return data_read_succeed: )int vvritehostdata(int wordnos, uintl6 connn_buffer
43、) (int blocksxeftover;int ij;swldisableo;blocks = vvordnoblock_size;leftover = wordnos%block_size;if(uftover%2 != 0)leftover += 1;for(i = 0; i blocks; i+) (buffersend0 = block_size;buffersendl = block_size;for(j = 0;j block.size; j+)buffersendj+2 = comm_b ufferf i *256+j ;/while(hplgethrdyo);hplseth
44、int(l);mhile(hpi_gethint();hpi_setreadad(lr(uint32)buffersend/4);if( leftover)(buffersend0 = leftover;buftersendl = leftover;for(j = 0; j leftover; j+)buffersendj+2 = coinin_bufferj;/ while(hpi_gethrdy();hplsethint(l);mhile(hpi_gethint();hpi_setreadad(lr(uint32)buffersend/4);svvi_enable();return dat
45、a_write_succeed;)ii/functions about control 3 leds on the board:/led 1 about feedback status;/led 2 about scan status;/led 3 about approach status;/void feedbackled_on() (gpio.wrlte(hgpioo, gpio.pin11,0x0800);)void feedbackled_off() (gpio_write(hgpioo, gpio_pin11,0x0000);)void scanled_on() (gpiowrit
46、e(hgpioo, gpio_pin9,0x0200);)void scanled_off()gpio_write(hgpioo, gpio_pin9,0x0000);17纳米阻抗显微镜的研制及其应用void approachled_on() (uint8 * reghcntl = (uint8 *)0x60000001;*reghcntl 1= 0x0001;)void approachled_off() (uint8 * reghcntl = (uint8 *)0x60000001;*reghcntl &= oxfffe;)功能层模 块数量函数名参数返值功能init iat2checkds
47、ph ardwarevoidint检查usb和 初始化dspe硬件freedspha rdwarevoidint关闭程f 调用释 dsp硬m 放 :件di4ispoweronvoidint检查电源是 否打开isheadreadyvoidint检查探头是 否准备好readsinglediuintl6uint16读单一路direadalldiuintl6uint16读所有di通道do26swimgadcinsultlationintint设置 的邮 隔w象aswimgbdc insultlationintint设置图4 的隔至象b rswimgcdcinsultlationintint设置邸象c直swhvscanpowerintint设号 括t高压扫 讲关swlaserpo werintint设置激光开 关swhvpowe rintint设置高压电 源开关seltestintint选择测试通 道seltestfilte rcapintint选择测试
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年能源互联网分布式能源交易市场潜力分析报告
- 2025年网络直播行业规范化发展趋势与商业模式创新策略研究
- 商务信息咨询公司合同付款管理办法
- 巷道掘进培训课件
- 2025年春运出行预测分析报告
- 岩石沙和黏土教学课件
- 屋面拆除安全教育培训课件
- 小麦春季管理课件
- 知识产权担保借款协议
- 专业物流公司特种车辆驾驶员合同样本
- 光传输习题库(附答案)
- 【MOOC】医学心理学-北京大学 中国大学慕课MOOC答案
- 【小学课件】《音乐家聂耳》课件
- 大型活动火灾应急预案
- 金属热处理工(高级工)职业技能认定考试题库(含答案)
- 12S101矩形给水箱国家标准图集
- 统编2024版七年级语文上册全册知识点梳理
- 体表肿物护理常规
- 3.1做有梦想的少年 课件-2024-2025学年统编版道德与法治七年级上册
- (新版)资金分析师职业鉴定考试复习题库资料-下(多选、判断题)
- 读书是教师最好的修行读书分享
评论
0/150
提交评论