关于24h的AD。好郁闷啊

[复制链接]
3008|3
 楼主| tanker110 发表于 2008-10-5 23:44 | 显示全部楼层 |阅读模式
&nbsp;要用到24HJ256GP210的AD的中断。24h中的AD有两个转换模块,ADC1,ADC2.<br />于是,我用ADC1的中断,中断向量是_ADC1Interrupt,这样写中断,有问题吗?<br />void&nbsp;__attribute__((__interrupt__))&nbsp;_ADC1Interrupt&nbsp;(void)<br />但是,却有如下警告,无法正常中断啊。<br /><br />'_ADC1Interrupt'&nbsp;is&nbsp;not&nbsp;a&nbsp;valid&nbsp;interrupt&nbsp;vector&nbsp;name&nbsp;for&nbsp;24HJ256GP210。<br />用过24h的朋友指教一二。<br />根据24的datasheet中断向量部分,ad就是这样写的,要不就是我理解的问题。<br />把_ADC1换成_T1,_T1Interrupt&nbsp;(void)却没着警告。好郁闷啊<br />为什么,哪的问题?
hotpower 发表于 2008-10-6 00:08 | 显示全部楼层

_ADCInterrupt

/**********************************************************************<br />*&nbsp;?2005&nbsp;Microchip&nbsp;Technology&nbsp;Inc.<br />*<br />*&nbsp;FileName:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADC.c<br />*&nbsp;Dependencies:&nbsp;&nbsp;&nbsp;&nbsp;Header&nbsp;(.h)&nbsp;files&nbsp;if&nbsp;applicable,&nbsp;see&nbsp;below<br />*&nbsp;Processor:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dsPIC30Fxxxx<br />*&nbsp;Compiler:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MPLAB?C30&nbsp;v1.32.00&nbsp;or&nbsp;higher<br />*<br />*&nbsp;SOFTWARE&nbsp;LICENSE&nbsp;AGREEMENT:<br />*&nbsp;Microchip&nbsp;Technology&nbsp;Inc.&nbsp;(揗icrochip?&nbsp;licenses&nbsp;this&nbsp;software&nbsp;to&nbsp;you<br />*&nbsp;solely&nbsp;for&nbsp;use&nbsp;with&nbsp;Microchip&nbsp;dsPIC?digital&nbsp;signal&nbsp;controller<br />*&nbsp;products.&nbsp;The&nbsp;software&nbsp;is&nbsp;owned&nbsp;by&nbsp;Microchip&nbsp;and&nbsp;is&nbsp;protected&nbsp;under<br />*&nbsp;applicable&nbsp;copyright&nbsp;laws.&nbsp;&nbsp;All&nbsp;rights&nbsp;reserved.<br />*<br />*&nbsp;SOFTWARE&nbsp;IS&nbsp;PROVIDED&nbsp;揂S&nbsp;IS.?&nbsp;MICROCHIP&nbsp;EXPRESSLY&nbsp;DISCLAIMS&nbsp;ANY<br />*&nbsp;WARRANTY&nbsp;OF&nbsp;ANY&nbsp;KIND,&nbsp;WHETHER&nbsp;EXPRESS&nbsp;OR&nbsp;IMPLIED,&nbsp;INCLUDING&nbsp;BUT&nbsp;NOT<br />*&nbsp;LIMITED&nbsp;TO,&nbsp;THE&nbsp;IMPLIED&nbsp;WARRANTIES&nbsp;OF&nbsp;MERCHANTABILITY,&nbsp;FITNESS&nbsp;FOR&nbsp;A<br />*&nbsp;PARTICULAR&nbsp;PURPOSE,&nbsp;OR&nbsp;NON-INFRINGEMENT.&nbsp;IN&nbsp;NO&nbsp;EVENT&nbsp;SHALL&nbsp;MICROCHIP<br />*&nbsp;BE&nbsp;LIABLE&nbsp;FOR&nbsp;ANY&nbsp;INCIDENTAL,&nbsp;SPECIAL,&nbsp;INDIRECT&nbsp;OR&nbsp;CONSEQUENTIAL<br />*&nbsp;DAMAGES,&nbsp;LOST&nbsp;PROFITS&nbsp;OR&nbsp;LOST&nbsp;DATA,&nbsp;HARM&nbsp;TO&nbsp;YOUR&nbsp;EQUIPMENT,&nbsp;COST&nbsp;OF<br />*&nbsp;PROCUREMENT&nbsp;OF&nbsp;SUBSTITUTE&nbsp;GOODS,&nbsp;TECHNOLOGY&nbsp;OR&nbsp;SERVICES,&nbsp;ANY&nbsp;CLAIMS<br />*&nbsp;BY&nbsp;THIRD&nbsp;PARTIES&nbsp;(INCLUDING&nbsp;BUT&nbsp;NOT&nbsp;LIMITED&nbsp;TO&nbsp;ANY&nbsp;DEFENSE&nbsp;THEREOF),<br />*&nbsp;ANY&nbsp;CLAIMS&nbsp;FOR&nbsp;INDEMNITY&nbsp;OR&nbsp;CONTRIBUTION,&nbsp;OR&nbsp;OTHER&nbsp;SIMILAR&nbsp;COSTS.<br />*<br />*&nbsp;REVISION&nbsp;HISTORY:<br />*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />*&nbsp;Author&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Date&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Comments&nbsp;on&nbsp;this&nbsp;revision<br />*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />*&nbsp;Hrushikesh&nbsp;Vasuki&nbsp;07/29/05&nbsp;&nbsp;First&nbsp;release&nbsp;of&nbsp;source&nbsp;file<br />*<br />*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />*<br />*&nbsp;ADDITIONAL&nbsp;NOTES:<br />*&nbsp;This&nbsp;file&nbsp;contains&nbsp;two&nbsp;functions&nbsp;-&nbsp;ADC_Init()&nbsp;and&nbsp;_ADCInterrupt().<br />*<br />**********************************************************************/<br /><br />#include&nbsp;&quot;p30fxxxx.h&quot;<br /><br /><br />unsigned&nbsp;int&nbsp;ADResult1&nbsp;=&nbsp;0;<br />unsigned&nbsp;int&nbsp;ADResult2&nbsp;=&nbsp;0;<br /><br />//Functions&nbsp;and&nbsp;Variables&nbsp;with&nbsp;Global&nbsp;Scope:<br />void&nbsp;ADC_Init(void);<br />void&nbsp;__attribute__((__interrupt__))&nbsp;_ADCInterrupt(void);<br /><br />//Functions:<br />//ADC_Init()&nbsp;is&nbsp;used&nbsp;to&nbsp;configure&nbsp;A/D&nbsp;to&nbsp;convert&nbsp;16&nbsp;samples&nbsp;of&nbsp;1&nbsp;input<br />//channel&nbsp;per&nbsp;interrupt.&nbsp;The&nbsp;A/D&nbsp;is&nbsp;set&nbsp;up&nbsp;for&nbsp;a&nbsp;sampling&nbsp;rate&nbsp;of&nbsp;1MSPS<br />//Timer3&nbsp;is&nbsp;used&nbsp;to&nbsp;provide&nbsp;sampling&nbsp;time&nbsp;delay.<br />//The&nbsp;input&nbsp;pin&nbsp;being&nbsp;acquired&nbsp;and&nbsp;converted&nbsp;is&nbsp;AN7.<br />void&nbsp;ADC_Init(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ADCON1&nbsp;Register<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;up&nbsp;A/D&nbsp;for&nbsp;Automatic&nbsp;Sampling<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Use&nbsp;internal&nbsp;counter&nbsp;(SAMC)&nbsp;to&nbsp;provide&nbsp;sampling&nbsp;time<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;up&nbsp;A/D&nbsp;conversrion&nbsp;results&nbsp;to&nbsp;be&nbsp;read&nbsp;in&nbsp;1.15&nbsp;fractional<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//number&nbsp;format.<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;up&nbsp;Sequential&nbsp;sampling&nbsp;for&nbsp;multiple&nbsp;S/H&nbsp;amplifiers<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//All&nbsp;other&nbsp;bits&nbsp;to&nbsp;their&nbsp;default&nbsp;state<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON1bits.FORM&nbsp;=&nbsp;3;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON1bits.SSRC&nbsp;=&nbsp;7;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON1bits.ASAM&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON1bits.SIMSAM&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ADCON2&nbsp;Register<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;up&nbsp;A/D&nbsp;for&nbsp;interrupting&nbsp;after&nbsp;2&nbsp;samples&nbsp;get&nbsp;filled&nbsp;in&nbsp;the&nbsp;buffer<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;up&nbsp;to&nbsp;sample&nbsp;on&nbsp;2&nbsp;S/H&nbsp;amplifiers&nbsp;-&nbsp;CH0&nbsp;and&nbsp;CH1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//All&nbsp;other&nbsp;bits&nbsp;to&nbsp;their&nbsp;default&nbsp;state<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON2bits.SMPI&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON2bits.CHPS&nbsp;=&nbsp;1;<br />&nbsp;&nbsp;&nbsp;&nbsp;//ADCON2bits.VCFG&nbsp;=&nbsp;3;&nbsp;//Ideally&nbsp;use&nbsp;external&nbsp;references<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ADCON3&nbsp;Register<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//We&nbsp;would&nbsp;like&nbsp;to&nbsp;set&nbsp;up&nbsp;a&nbsp;sampling&nbsp;rate&nbsp;of&nbsp;1&nbsp;MSPS<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Total&nbsp;Conversion&nbsp;Time=&nbsp;1/Sampling&nbsp;Rate&nbsp;=&nbsp;125&nbsp;microseconds<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//At&nbsp;29.4&nbsp;MIPS,&nbsp;Tcy&nbsp;=&nbsp;33.9&nbsp;ns&nbsp;=&nbsp;Instruction&nbsp;Cycle&nbsp;Time<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//The&nbsp;A/D&nbsp;converter&nbsp;will&nbsp;take&nbsp;12*Tad&nbsp;periods&nbsp;to&nbsp;convert&nbsp;each&nbsp;sample<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//So&nbsp;for&nbsp;~1&nbsp;MSPS&nbsp;we&nbsp;need&nbsp;to&nbsp;have&nbsp;Tad&nbsp;close&nbsp;to&nbsp;83.3ns<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Using&nbsp;equaion&nbsp;in&nbsp;the&nbsp;Family&nbsp;Reference&nbsp;Manual&nbsp;we&nbsp;have<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ADCS&nbsp;=&nbsp;2*Tad/Tcy&nbsp;-&nbsp;1<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON3bits.SAMC&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON3bits.ADCS&nbsp;=&nbsp;4;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ADCHS&nbsp;Register<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;up&nbsp;A/D&nbsp;Channel&nbsp;Select&nbsp;Register&nbsp;to&nbsp;convert&nbsp;AN3&nbsp;on&nbsp;Mux&nbsp;A&nbsp;input<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//of&nbsp;CH0&nbsp;and&nbsp;CH1&nbsp;S/H&nbsp;amplifiers<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCHS&nbsp;=&nbsp;0x0023;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ADCSSL&nbsp;Register<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Channel&nbsp;Scanning&nbsp;is&nbsp;disabled.&nbsp;All&nbsp;bits&nbsp;left&nbsp;to&nbsp;their&nbsp;default&nbsp;state<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCSSL&nbsp;=&nbsp;0x0000;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//ADPCFG&nbsp;Register<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;up&nbsp;channels&nbsp;AN7&nbsp;as&nbsp;analog&nbsp;input&nbsp;and&nbsp;configure&nbsp;rest&nbsp;as&nbsp;digital<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Recall&nbsp;that&nbsp;we&nbsp;configured&nbsp;all&nbsp;A/D&nbsp;pins&nbsp;as&nbsp;digital&nbsp;when&nbsp;code&nbsp;execution<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//entered&nbsp;main()&nbsp;out&nbsp;of&nbsp;reset<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADPCFG&nbsp;=&nbsp;0xFFFF;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADPCFGbits.PCFG3&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Clear&nbsp;the&nbsp;A/D&nbsp;interrupt&nbsp;flag&nbsp;bit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFS0bits.ADIF&nbsp;=&nbsp;0;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Set&nbsp;the&nbsp;A/D&nbsp;interrupt&nbsp;enable&nbsp;bit<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IEC0bits.ADIE&nbsp;=&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Turn&nbsp;on&nbsp;the&nbsp;A/D&nbsp;converter<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//This&nbsp;is&nbsp;typically&nbsp;done&nbsp;after&nbsp;configuring&nbsp;other&nbsp;registers<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADCON1bits.ADON&nbsp;=&nbsp;1;<br /><br />}<br /><br />//_ADCInterrupt()&nbsp;is&nbsp;the&nbsp;A/D&nbsp;interrupt&nbsp;service&nbsp;routine&nbsp;(ISR).<br />//The&nbsp;routine&nbsp;must&nbsp;have&nbsp;global&nbsp;scope&nbsp;in&nbsp;order&nbsp;to&nbsp;be&nbsp;an&nbsp;ISR.<br />//The&nbsp;ISR&nbsp;name&nbsp;is&nbsp;chosen&nbsp;from&nbsp;the&nbsp;device&nbsp;linker&nbsp;script.<br />void&nbsp;__attribute__((__interrupt__))&nbsp;_ADCInterrupt(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;ADResult1&nbsp;=&nbsp;ADCBUF0;<br />&nbsp;&nbsp;&nbsp;&nbsp;ADResult2&nbsp;=&nbsp;ADCBUF1;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//Clear&nbsp;the&nbsp;A/D&nbsp;Interrupt&nbsp;flag&nbsp;bit&nbsp;or&nbsp;else&nbsp;the&nbsp;CPU&nbsp;will<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//keep&nbsp;vectoring&nbsp;back&nbsp;to&nbsp;the&nbsp;ISR<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IFS0bits.ADIF&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />}<br /><br />
 楼主| tanker110 发表于 2008-10-7 14:52 | 显示全部楼层

已经可以使用了

看了楼上的贴,感谢中.<br />我试了试<br />尽管仍然出现<br />'_ADC1Interrupt'&nbsp;is&nbsp;not&nbsp;a&nbsp;valid&nbsp;interrupt&nbsp;vector&nbsp;name&nbsp;for&nbsp;24HJ256GP210<br />但AD可以正常中断.有些奇怪哦.<br />
systemchip 发表于 2008-10-7 15:28 | 显示全部楼层

用新版本C编译器

  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

14

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部