[技术问答] M453AD无法进入中断

[复制链接]
1154|7
 楼主| JY-DX-JY 发表于 2016-5-6 12:47 | 显示全部楼层 |阅读模式
我有一块M453VG6AE的开发板,买了一本《ARM Cortex-M4微控制器原理与实践》。
可是上面的AD例程不完整,我尝试着写了一下,编译没问题。
可是不仅中断。代码如下,请大神指教,哪里有问题?谢谢!
#include "stdio.h"
#include "M451Series.h"
#include "Common.h"
#include "Typedef.h"
#include "SmartM_M4.H"

VOLATILE BOOL g_unAdcIntFlag=0;

UINT32 ADC_Read(VOID)
{
        //Æô¶¯²ÉÑùÄ£¿é4
        EADC_START_CONV(EADC,(0x1<<4));
        //µÈ´ý²ÉÑùÄ£¿é4ת»»½áÊø
        while(g_unAdcIntFlag==0);
        g_unAdcIntFlag=0;
        //·µ»Ø²ÉÑùÄ£¿é4µÄÊý¾ÝÖµ
        return EADC_GET_CONV_DATA(EADC,4);
}

int32_t main(void)
{
        UINT32 temp;
        PROTECT_REG
        (
                SYS_Init(PLL_CLOCK);
                //ʹÄÜADCʱÖÓÄ£¿é
                CLK_EnableModuleClock(EADC_MODULE);
                //ÉèÖÃADCʱÖÓԴΪPLL,²¢½øÐÐ8·ÖƵ£¬¼´ADCʱÖÓÆµÂÊ=72MHz/8=9MHz
                CLK_SetModuleClock(EADC_MODULE,0,CLK_CLKDIV0_EADC(8));
                UART0_Init(115200);
        )
        printf("+----------------------------------+\n");
        printf("|                ADC Sample Code                 |\n");
        printf("+----------------------------------------+\n\n");
        //ÉèÖÃADCÄÚ²¿²ÉÑùʱ¼äΪ6¸öADCʱÖÓ
        EADC_SetInternalSampleTime(EADC,6);
        //ÅäÖÃPB0Òý½ÅΪADCÄ£ÄâÐźÅÊäÈëÒý½Å
        SYS->GPB_MFPL&=~(SYS_GPB_MFPL_PB0MFP_Msk);
        SYS->GPB_MFPL|=(SYS_GPB_MFPL_PB0MFP_EADC_CH0);
        //ÉèÖÃADCÊäÈëģʽΪµ¥´ÎÍê³É£¬Í¬Ê±Ê¹ÄÜA/Dת»»Æ÷
        EADC_Open(EADC,EADC_CTL_DIFFEN_SINGLE_END);
        //ÅäÖòÉÑùÄ£¿é4×÷ΪģÄâͨµÀÊäÈë0£¬Í¬Ê±ÉèÖÃADINT0´¥·¢Ô´
        EADC_ConfigSampleModule(EADC,4,EADC_ADINT0_TRIGGER,0);
        //ʹÄÜADC0µÄ²ÉÑùÄ£¿é4ÖжÏ
        EADC_ENABLE_INT(EADC,0X1);
        EADC_ENABLE_SAMPLE_MODULE_INT(EADC,0,(0x1<<4));
        //ʹÄÜNVIC ADC0_0 IRQ ÖжÏ
        NVIC_EnableIRQ(ADC00_IRQn);
        while(1)
        {
                temp=ADC_Read();
                printf("%d\r\n",temp);
                Delayms(1000);
       
        }
       
}
VOID ADC00_IRQHandler(VOID)
{
        if(EADC_GET_INT_FLAG(EADC,4)==1)
        {
                EADC_CLR_INT_FLAG(EADC,4);
                g_unAdcIntFlag=1;
        }
}

huangcunxiake 发表于 2016-5-6 15:40 | 显示全部楼层
注释乱码是编码格式的问题,你保存成utf-8试试
huangcunxiake 发表于 2016-5-6 15:41 | 显示全部楼层
另外这书这么贵,买了之后竟然例程都不完整。哎,这售后服务不给力锕
 楼主| JY-DX-JY 发表于 2016-5-6 15:58 | 显示全部楼层
只是个别例程不完整。
搞好了
VOID ADC00_IRQHandler(VOID)
{
        if(EADC_GET_INT_FLAG(EADC,1)==1)
        {
                EADC_CLR_INT_FLAG(EADC,1);
                g_unAdcIntFlag=1;
        }
}
落叶行健ywm 发表于 2016-5-6 17:07 | 显示全部楼层
你还是直接玩官方给的例程比较好!
天灵灵地灵灵 发表于 2016-5-6 21:28 | 显示全部楼层
不要用人家自己搞的,不通用,还是官方的好,通用。
xuesong7417 发表于 2016-5-7 11:45 | 显示全部楼层
大神的解释还需好好看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:晴天响霹雳,平地一声雷。

245

主题

3351

帖子

30

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