请教一个关于28335的ADC时钟问题夹角公式,非常

使用外中断
程序单步运行可以 全速运行就进不了外中断或者跑飞是什么原因-电子产品世界论坛
使用外中断
程序单步运行可以 全速运行就进不了外中断或者跑飞是什么原因
DSP28335 &使用外中断 &程序单步运行可以 全速运行就进不了外中断或者跑飞是什么原因
& 有哪位用过的分享一下使用经验 &非常感谢
DSP28335 &使用外中断 &程序单步运行可以 全速运行就进不了外中断或者跑飞是什么原因
& 有哪位用过的分享一下使用经验 &非常感谢
“外中断”是指外部中断吗?单步运行能进中断?
最好把中断相关的配置发上来,才好判断
还有,跑飞是不是指进到illegal中断了?还是什么别的意思
对 &跑飞就是进入到&
interrupt void SEQ2INT_ISR(void)& //SEQ2 ADC
Insert ISR Code here
To receive more interrupts from this PIE group, acknowledge this interrupt
PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
Next two lines for debug only to halt the processor here
Remove after inserting ISR Code
asm("&& & ESTOP0");
我的外中断程序的设置都是没有问题的,我的程序比较长,所以我单把我的外部中断程序拿出来测试了一下 &发现没有问题,但是在我的整个大的程序中,每次点击 run &想要全速运行的时候 ,就只进入一次外部中断 ,其余时间不进入外中断。
有没有给点建议 这是什么原因造成的,还有就是我的程序先运行一个小的定时器程序后,在关闭这个定时器程序,那么再运行我的这个大的程序就能全速运行了,这是什么原因呢? & 有人说是电源芯片的问题,但我觉得硬件都很正常啊 &希望给点建议,多谢了。
void main(void)
InitSysCtrl();
InitCpuTimers();&
/*****************************/
/*第二步:I/O设置&&&&&&&&&&& */
/*****************************/
InitGpio();&
InitXintf();
// 全配置为通用I/O
InitPieCtrl();
// Disable CPU interrupts and clear all CPU
interrupt flags:
IER = 0x0000;
IFR = 0x0000;
InitPieVectTable();
PieVectTable.XINT1 = &ISRExint3;
&& PieCtrlRegs.PIEIER1.bit.INTx4= 1;
IER |= M_INT1;
EINT;&& // Enable Global interrupt
ERTM;&& // Enable Global realtime
interrupt DBGM
InitScibGpio();
scib_init();
/*****************************/
/*第六步:用户程序&&&&&&&&&& */
/*****************************/
// 省略了中间的变量的声明部分
/*****************************/
/*主循环函数开始&&&&&&&&&&&& */
/*****************************/
EXINTSHIYAN=GpioDataRegs.GPBDAT.bit.GPIO43;
GpioDataRegs.GPBDAT.bit.GPIO44=EXINTSHIYAN;
interrupt void ISRExint3(void)
&&&&&&&& & PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
上面是我的外部中断的程序 &用的外部中断1 & 下面是是定时器的程序 &其中变量的声明我没写 &我程序的内容也没写 &主要写的配置部分 应该都是正确的 &单独运行这样的小程序 运行都是成功地 &但是 当把这些程序放到我的大的程序当中的时候就只进入一次中断,但是 &如果先运行我的下面的这个定时器程序 &然后再关闭的话 &我的大程序就能全速顺利运行 & 这是什么原因呢 &
& & &下面是我的定时器中断的小程序
#include "DSP28x_Project.h"
interrupt void ISRTimer0(void);
void main(void)
/*****************************/
/*第一步:时钟设置&&&&&&&&&& */
/*****************************/
&& InitSysCtrl();
/*第二步:I/O设置&&&&&&&&&&& */
/*****************************/
&& InitGpio();&
/*第三步:中断和定时器设置&& */
/*****************************/
&& InitPieCtrl();
&& IER = 0x0000;
&& IFR = 0x0000;
&& InitPieVectTable();
&& EALLOW;
&& PieVectTable.TINT0 = &ISRTimer0;
&& EDIS;&&&
// Step 4. Initialize the Device Peripheral. This function can be
&& InitCpuTimers();&&
&& ConfigCpuTimer(&CpuTimer0, 150, 500000);
&& StartCpuTimer0();
&& PieCtrlRegs.PIEIER1.bit.INTx7 = 1;
&& IER |= M_INT1;
&& EINT;&& // Enable Global interrupt INTM
&& ERTM;&&
&& InitXintf();
& while ( 1 )
&&&&&&&& {
&&&&&&&&&&&&&&&&&&
&&&&&&&& }
interrupt void ISRTimer0(void)
&&&&& CpuTimer0.InterruptCount++;
// Acknowledge this interrupt to receive more interrupts from group 1
&&&&& PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
&&&&& CpuTimer0Regs.TCR.bit.TIF=1;
&&&&& CpuTimer0Regs.TCR.bit.TRB=1;
&能解释下 为什么 & 只有运行了这个定时器程序之后我的大的程序才能顺利运行吗 & 如果直接运行我的大的程序就会只进入一次外部中断 或者跑飞 &,或者这个定时器中断程序会影响硬件设置 &然后我的大的程序就能顺利运行 &??????????
对 就是进入到&illegal中断了了 & 有的时候 &还会跳到&
&.sect "codestart"
code_start:
& & .if WD_DISABLE == 1
& & & & LB wd_disable & & & ;Branch to watchdog disable code
& & & & LB _c_int00 & & & & ;Branch to start of boot.asm in RTS library
& & .endif
的 & 这句 &&& LB wd_disable & & & ;Branch to watchdog disable code &中来 &是什么原因 ???
这不是程序跑飞,程序异常的时候很多情况下会进入illegal中断&
而你指的是进入了SEQ2INT_ISR中断,这个也是PIE中int1组的,SEQ2INT是Int1.2,而看你程序的意思是想进入XINT1外部中断,是INT1.4。
Int1.2的优先级更高,所以如果两个中断同时发生会优先响应Int1.2. 大程序里面是不是还配置了SEQ2触发的中断?
此外,XINT1只能使用GPIO0-31,而你的程序里面貌似是用到的43和44?
还有你提到的先运行定时器程序,再运行大程序,这两个程序是不是两个工程?正常情况下不应该有什么影响的。
最后的那段汇编是正常的,几乎所有程序编译以后都有这段,是代码入口
& 1)恩 &我的定时器程序和这个大的程序的确是两个工程 &但是现在的情况是 我只打开我的大的程序 运行就只能运行一次 然后现在的情况是 要么不进入外部中断程序 要么程序运行一次之后 整个程序都不运行了 main 函数里面放个断点 &都看不到程序运行 ,你觉得定时器程序会不会影响硬件 然后再影响我的程序的运行,比如时钟电源的稳定之类的,我觉得有点扯。
& 2)我用的是 &GPIO 31 ,那个设置是在GPIO.C里面设置的 &,这个 43 和44 引脚是用作别的用途的 &
我并没有用 SEQ1INT(ADC) 或者SEQ2INT(ADC)这两个中断啊 &,程序有时候就进入到这里面&
我大的程序里面没有用到这些中断 , 我也没有专门设置这些中断怎么能进入呢 &你看我的程序中有
&&PieCtrlRegs.PIEIER1.bit.INTx4= 1;&
& &并没有设置 &
&&PieCtrlRegs.PIEIER1.bit.INTx1= 1;
&&PieCtrlRegs.PIEIER1.bit.INTx2= 1; 呀 & 我所有的程序中都没有上面两条语句 &怎么会进入到这两个中断中去呢
匿名不能发帖!请先 [
Copyright (C) 《电子产品世界》杂志社 版权所有各位大哥,求教如何设置28335的adc采样频率_百度知道
各位大哥,求教如何设置28335的adc采样频率
我有更好的答案
0809上有个clock脚,这个是接工作时钟的,和采样率不是一个概念。采样率由控制芯片决定。比如你用单片机,就有单片机发送一个采样”指令&给0809,它就采样一次。指令发送速度就是采样频率。
采纳率:80%
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。德州仪器 (TI) 是一家跨国性的半导体设计与制造公司。因具有100,000+个以上模拟IC和嵌入式处理器而独树一帜、同时兼备软件、工具以及业界最大的销售团队/技术支持团队。
Texas Instruments Incorporated. 版权所有.DSP28377S - &ADC学习编程笔记
1 ADC类型导致的配置区别
& & &F28377S的ADC类型是Type 4类型,我的理解是不同类型的ADC采样方式是不一样的:F28335ADC 采样序列可以配置为顺序采样和同步采样模式,而F28377S采样序列可以配置为round-robin or burst模式,这两种模式下面再讲解。
&2 ADC上电配置步骤
首先明确一点,ADC是专用管脚,不需要配置GPIO,所以可以直接配置ADC的寄存器
//Write ADC configurations and power up the ADC for both ADC A and ADC B
void ConfigureADC(void)
//write configurations
AdcaRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4
//配置ADC时钟,ADC时钟有系统时钟直接提供参考时钟,计算的时候需要注意
AdcSetMode(ADC_ADCA, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE); // 设置ADC的采样分辨率为12bit,单输入模式(区别于差分模式)
AdcbRegs.ADCCTL2.bit.PRESCALE = 6; //set ADCCLK divider to /4
AdcSetMode(ADC_ADCB, ADC_RESOLUTION_12BIT, ADC_SIGNALMODE_SINGLE);
//Set pulse positions to late
AdcaRegs.ADCCTL1.bit.INTPULSEPOS = 1;
//设置ADC的中断产生时机在转换完成后产生中断(Interrupt pulse generation occurs at the end of the conversion)
AdcbRegs.ADCCTL1.bit.INTPULSEPOS = 1;
//power up the ADC
AdcaRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//给ADC上电,注意需要延时1ms左右等待上电完成
AdcbRegs.ADCCTL1.bit.ADCPWDNZ = 1;
//delay for 1ms to allow ADC time to power up
DELAY_US(1000);
3 ADC采样通道、保持时间和触发信号配置,这里和中断配置在一起讲了!
AdcbRegs.ADCSOC7CTL.bit.CHSEL = 14;
//SOC0 will convert internal connection B0
AdcbRegs.ADCSOC7CTL.bit.ACQPS = tempsensor_ //sample window is 100 SYSCLK cycles
AdcbRegs.ADCSOC7CTL.bit.TRIGSEL = 5; //trigger on ePWM1 SOCA/C,这里根据需要进行配置
AdcaRegs.ADCINTSEL1N2.bit.INT1SEL = 7; //end of SOC0 will set INT1 flag (这里一般配置为最后一个优先级的SOC即可!注意要随时修改,这里栽跟头了)(优先级放最后讲解,可以不用理解!)
AdcaRegs.ADCINTSEL1N2.bit.INT1E = 1;
//enable INT1 flag (如果不配置这里,那么ADC采样完成后中断flag不会置位,所以必须配置为1)
AdcaRegs.ADCINTFLGCLR.bit.ADCINT1 = 1; //make sure INT1 flag is cleared
在配置过程中需要注意的是:
为了进行测试,有时候会使用13 temp sensor做测试用(需要注意必须先初始化此温度端口,然后在使用,否则ADC采样会被卡在这个地方导致莫名其妙问题)
& & & //Initialize the temperature sensor& & & //Note: The argument needs to change if using a VREFHI voltage other than 3.0V& & & InitTempSensor(3.0); (这里已经有现成的封装函数可以使用,直接调用即可!)(如果不初始化,会导致采样无法正常顺序进行,切记切记!)
AdcaRegs.ADCSOC6CTL.bit.CHSEL = 13;
//SOC0 will convert internal connection A13
AdcaRegs.ADCSOC6CTL.bit.ACQPS = tempsensor_ //sample window is 100 SYSCLK cycles
AdcaRegs.ADCSOC6CTL.bit.TRIGSEL = 5; //trigger on ePWM1 SOCA/C
&4 epwm触发配置
注意:epwm可以配置为在ZERO和PERIOD两个时刻都可以触发SOCA采样信号,所以在逆变器中可以连续采样两次,这个对于编程很重要,差点有栽跟头了,所以一定要看官方文档!
void ConfigureEPWM(void)
// Assumes ePWM clock is already enabled
EPwm1Regs.ETSEL.bit.SOCAEN
// Disable SOC on A group
EPwm1Regs.ETSEL.bit.SOCASEL
// Select SOC on up-count
EPwm1Regs.ETPS.bit.SOCAPRD = ET_CTR_PRDZERO;
// Generate pulse on 1st event(注意这里EPWM可以配置为在ZERO 和 PERIOD时触发ADC采样,这和F28335不一样!又差点栽跟头了!)
EPwm1Regs.CMPA.bit.CMPA = 0x0800;
// Set compare A value to 2048 counts
EPwm1Regs.TBPRD = 0x1000;
// Set period to 4096 counts
EPwm1Regs.TBCTL.bit.CTRMODE = 3;
// freeze counter
最后还有关于EOC &转换优先级 和 ADC采样结构等内容,作为了解性质,晚点补充,今天先到次为止!
阅读(...) 评论()

我要回帖

更多关于 时钟问题 奥数 的文章

 

随机推荐