LGT复位按键按下后,程序没有反应了
本帖最后由 hyg2012 于 2012-5-15 10:07 编辑刚收到线路板,调了一下,串口可以通信了,移植了一个操作系统,也跑起来了,基本没有做修改。
发现复位按键按下后,程序没有反应了。只有通过断电才能运行,可以用仿真器下载程序,但是不能运行。不知道怎么回事。(线路板是在网站上邮购的)
原来是工程样片的问题,找了半天没有看见,仔细又查了一下,下面的帖子上找到的
http://www.ourdev.cn/thread-5468821-1-4.html
初始化外部时钟
http://www.ourdev.cn/thread-5475400-1-1.html
void init_devices(void)
{
port_init();
PMCR =0x15; // PMCR =0x35;
//先不要置位bit5
delay_nms(10); //延时10ms等待晶振输入稳定
PMCR =0x35;// 置位bit5, 切换系统时钟到外部晶振
PMCR=0x34; //关闭内部RC
//PMCR &=~BIT(0);
//CLKPR =0x81; //置位MASK_CLKPCE,4个周期内修改分频系数
CLKPR=0x80; //1分频,默认是2分频(0x01)
CLKPR =0x00; //清除 MASK_CLKPCE
}
有关CLKPR的设置,是我们的文档没有描述清楚,稍后会更新文档。
CLKPCE:对CLKPR写入0x80才会置位CLKPCE,写CLKPR4个时钟之后或者CLKPCE为高时再次设置CLKPR都会清零CLKPCE。
LS的本意是保持CLKPS的值不变同时置位CLKPCE,再写入新的CLKPS值,最后清零CLKPCE,
实际的运行结果会是:对CLKPR写入0x81不会置位CLKPCE,同时4个时钟之后CLKPCE会被清零,
再写入0x80时才会置位CLKPCE,但CLKPCE会提前被清零因为前面写入0x81时已经开始4个时钟的计数了,
再写入0x00时CLKPCE已经被硬件清零了,导致CLKPS的值设置不成功。 复位按键没有加上拉电阻,但是引脚上有3.3V电压。程序我只是配置为外部晶振,打开串口接受中断,使用定时器0作为系统滴答。PB0口直接高电平驱动一个发光管,没有加限流电阻。 是用外部晶振吗? 是的,7.3728M
本帖最后由 hyg2012 于 2012-5-14 18:47 编辑
用的是DrvSYS那个函数配置的
E_SYS_STATUS DrvSYS_ClockSwitch(STR_SYS_DEV *psSYSParam); 这个问题人家芯片厂家不是说了嘛!前期的芯片在用外部晶振的时候,外部复位是没有作用的 关键是按下复位键后,程序就死了,不再运行了。那如果需要复位怎么办? 原来是工程样片的问题,找了半天没有看见,仔细又查了一下,下面的帖子上找到的
http://www.ourdev.cn/thread-5468821-1-4.html
初始化外部时钟
http://www.ourdev.cn/thread-5475400-1-1.html
void init_devices(void)
{
port_init();
PMCR =0x15; // PMCR =0x35;
//先不要置位bit5
delay_nms(10); //延时10ms等待晶振输入稳定
PMCR =0x35;// 置位bit5, 切换系统时钟到外部晶振
PMCR=0x34; //关闭内部RC
//PMCR &=~BIT(0);
//CLKPR =0x81; //置位MASK_CLKPCE,4个周期内修改分频系数
CLKPR=0x80; //1分频,默认是2分频(0x01)
CLKPR =0x00; //清除 MASK_CLKPCE
}
有关CLKPR的设置,是我们的文档没有描述清楚,稍后会更新文档。
CLKPCE:对CLKPR写入0x80才会置位CLKPCE,写CLKPR4个时钟之后或者CLKPCE为高时再次设置CLKPR都会清零CLKPCE。
LS的本意是保持CLKPS的值不变同时置位CLKPCE,再写入新的CLKPS值,最后清零CLKPCE,
实际的运行结果会是:对CLKPR写入0x81不会置位CLKPCE,同时4个时钟之后CLKPCE会被清零,
再写入0x80时才会置位CLKPCE,但CLKPCE会提前被清零因为前面写入0x81时已经开始4个时钟的计数了,
再写入0x00时CLKPCE已经被硬件清零了,导致CLKPS的值设置不成功。
建议把这些解决了的问题加一个酷字,找起来好找一些。或者是整理一下置顶,上面的问题在第4页找到的。 原来如此
页:
[1]