免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1783 | 回复: 4
打印 上一主题 下一主题

[其它] 这测试代码的问题在哪里??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-17 16:59 |只看该作者 |倒序浏览
测试了一整天,还是没有找到问题。本来是要做 watchdog 定时 产生 中断,点灯的实验~~~现在程序出了点问题,把代码 阉割了,找问题~~
但是现在,还是未能得到预期结果
***********************************************************
Makefile

objs := head.o main.o

led.bin: $(objs)
        arm-linux-ld -Ttext 0x00000000 -o led_elf $^
        arm-linux-objcopy -O binary -S led_elf $@
        arm-linux-objdump -D -m arm led_elf > led.dis
       
%.o:%.c
        arm-linux-gcc -Wall -O2 -c -o $@ $<

%.o:%.S
        arm-linux-gcc -Wall -O2 -c -o $@ $<

clean:
        rm -f led.bin led_elf led.dis *.o

***************************************************************
head.S

.extern        main
.text
.global _start
_start:
        b        Reset
       
HandleUndef:
        b        HandleUndef
       
HandleSWI:
        b        HandleSWI
       
HandlePrefetchAbort:
        b        HandlePrefetchAbort
       
HandleDataAbort:
    b   HandleDataAbort
       
HandleNotUsed:
    b   HandleNotUsed

HandleIRQ:
        b   HandleIRQ

HandleFIQ:
    b   HandleFIQ
       
Reset:                   
        ldr        sp, =4096         @ 设置堆栈,
    bl        clock_init       @初始化系统时钟
       
        msr cpsr_c, #0xd2    @ 进入中断模式
        ldr sp,=3072
                       
        msr cpsr_c, #0xd3    @ 进入系统模式
        ldr sp, =4096
       
        msr cpsr_c, #0x5f   @设置I-bit=0,开IRQ中断
                       
                       
        ldr lr, =halt_loop      @ 设置返回地址
        ldr pc, =main           @ 调用main函数
halt_loop:
    b   halt_loop
                       
******************************************************************

main.c(主程序)

#define S3C2440_MPLL_200MHZ        ((0x5c<<12)|(0x01<<4)|(0x02))

//初始化系统时钟 FCLK=200MHz,HCLK=100MHz,PCLK=50MHz

void clock_init(void)
{
        CLKDIVN  = 0x03;
       
        __asm__(
    "mrc    p15, 0, r1, c1, c0, 0\n"      
    "orr    r1, r1, #0xc0000000\n"         
    "mcr    p15, 0, r1, c1, c0, 0\n"     
    );
       
        MPLLCON = S3C2440_MPLL_200MHZ;
       
}

void led_on()         //亮灯
{
        GPFDAT&=~(0X7<<4);
}

void led_off() //灭灯
{
        GPFDAT|=(0X7<<4);
}

void led_init() //初始化 LED 管脚
{       
        //清理 0
        GPFCON&=~((3<<|(3<<10)|(3<<12));
        //置 1
        GPFCON|=((1<<|(1<<10)|(1<<12));
       
        led_off();
}

/*  屏蔽*************************
void init_irq()  //初始化中断(watchdog)
{
        //设置为 每 1 秒 产生一次中断
        WTCON = 0x3d<<8;
        WTDAT = 50000;
        WTCNT = 50000;
        WTCON|= (1<<5)|(1<<2);
        //开 watchdog 中断
        INTSUBMSK&=~(0x1<<13);
        INTMSK&=~(0x1<<9);
}
*/
void  wait(volatile unsigned long dly)

{       
         for(; dly > 0; dly--);
}

static int flag=0;
void WAT_Handl()
{
        //清除中断
        SUBSRCPND = 0x1<<13;
        SRCPND = 0x1<<9;
    INTPND = 0x1<<9;
        if(flag==0)
        {
                led_on();
                flag=1;
                wait(3000000)
        }
        else
        {       
                led_off();
                flag=0;
                wait(3000000)
        }

}

int main(void)
{
        led_init();
        //init_irq();
       
        while(1)
        {
                void WAT_Handl()
        }
        return 0;
}

论坛徽章:
0
2 [报告]
发表于 2013-11-17 17:00 |只看该作者
把,生成的 led.bin文件,烧写 到开发板,
灯 只是亮 ,不会灭

论坛徽章:
0
3 [报告]
发表于 2013-11-17 19:24 |只看该作者
求救啊~~~给位大神

论坛徽章:
0
4 [报告]
发表于 2013-11-17 20:00 |只看该作者
我把代码精简成这样

static int  flag=0;
void WAT_Handl()
{
        if(flag==0)
        {
                led_on();
                flag=1;
                wait(300000);
        }
        else
        {       
                led_off();
                flag=0;
                wait(300000);
        }

}

void disable_watchdog()
{
        WTCON = 0;
}

int main(void)
{
        led_init();
        disable_watchdog();
       
        while(1)
        {
                WAT_Handl();
        }
        return 0;
}


还是不行~~~~灯 亮了 就 不灭

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
5 [报告]
发表于 2013-11-18 09:55 |只看该作者
你把flag作为 WAT_Handl的参数传递
main里的while里面这么写

WAT_Handl(1)
sleep(1)
WAT_Handl(0)
就闪烁了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP