打印
[Cortex-M0技术交流]

RyanHsiung学习第10贴,ISP测试及改进!

[复制链接]
2114|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Ryanhsiung|  楼主 | 2011-11-22 19:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Ryanhsiung 于 2011-11-22 19:11 编辑

ISP具体操作请参见菜农群课笔记之ICP与ISP----20110412(整理版)


   昨天刚始试ISP,一开始用ICP烧录进去固件但是不能用,找了很久的原因,后来是才发现固件版本烧错了。
   后面改了版本试了试,感觉不错,蛮顺利的。


但是我个人认为现有的ISP不能用于产品,所以也自己改进一下(就一下)。
现有问题:
  先说一下我改进的地方,先前的BOOTLOADER没有超时处理,若进入BOOTLOADER状态,若上位机不动作则下位机一直在下面死等!
改进方法:
  增加一个计数器,累加到10S则跳到到APROM。

以下是初始化代码及中断代码

//---------------------------------------------------------------------------------TIMER
static __inline void InitTIMER0(void)
{
/* Step 1. Enable and Select Timer clock source */
SYSCLK->CLKSEL1.TMR0_S = 7; //Select 22.1184Mhz for Timer0 clock source
SYSCLK->APBCLK.TMR0_EN =1; //Enable Timer0 clock source
/* Step 2. Select Operation mode */
TIMER0->TCSR.MODE=1; //Select periodic mode for operation mode
/* Step 3. Select Time out period = (Period of timer clock input) * (8-bit Prescale + 1) * (24-bit TCMP)*/
TIMER0->TCSR.PRESCALE=255; // Set Prescale [0~255]
TIMER0->TCMPR = 1000; // Set TCMPR [0~16777215]
// (1/22118400)*(255+1)*(1000)= 0.0115 =11.5MS中断一次
/* Step 4. Enable interrupt */
TIMER0->TCSR.IE = 1;
TIMER0->TISR.TIF = 1; //Write 1 to clear for safty
NVIC_EnableIRQ(TMR0_IRQn); //Enable Timer0 Interrupt
/* Step 5. Enable Timer module */
TIMER0->TCSR.CRST = 1; //Reset up counter
TIMER0->TCSR.CEN = 1; //Enable Timer0
/* */
g_TimeoutCount = 0 ; //
// TIMER0->TCSR.TDR_EN=1; // Enable TDR function
}

//使用T0 来做超时处理
void TMR0_IRQHandler(void) // Timer0 interrupt subroutine
{
if(g_TimeoutCount++>900) // Timeout超时处理约10S
{ //这里的时间不准,我顺便写的
TIMER0->TCSR.CEN = 0; // Enable Timer0
//超时退出 这里要添加代码
/* Trap the CPU */
while(1);
}
TIMER0->TISR.TIF =1;
}

    特别说明:
       1、建议使用 22.1184Mhz 作为 Timer0 的时钟源,这样你的延时就于外部晶振无关了.
           不然这次是个12M的计10S,下次4M的计30S.   (注:内部时钟没有外部时钟准)
       2、退出时要将T0关闭
       3、为了不锻炼新来的网友,本文中只贴出了T0的初始化与T0中断函数 和说明实现方法,而贴出全部代码
            各位网友需要增加的地方:
              1、在退出的地方将T0关闭
              2、在正常收发码处将g_TimeoutCount清0,
              3、T0中断超时加入超时处理代码,(注:这里不能goto _APROM,大家可以写一个子函数)
              4、哦,不要忘了初始化哦
       4、加入代码后空间不足,那间网友可将一个USB 或者串口部分去除(或都优化一下)
           我的新项目选的是100系列所以我就将USB去除了!
    P.S.   新唐这个开源的ISP做的不错,且代码写的也不错,便于修改与移植!,还有上位机也是开源的,方便自己改上位。       觉得我说的对就支持一下!

相关帖子

沙发
Ryanhsiung|  楼主 | 2011-11-22 19:13 | 只看该作者
强烈建议:若ISP稳定后,新唐出厂前先烧录USB UART的固件!!!
不是我这个啊,而是官方自己的ISP_Code_NUC100_v2.3.bin

使用特权

评论回复
板凳
hotpower| | 2011-11-22 19:18 | 只看该作者
不错!!!
最好上传压缩包

使用特权

评论回复
地板
Ryanhsiung|  楼主 | 2011-11-22 20:17 | 只看该作者
3# hotpower

授人已渔最好了,这个没难度,正好可以让新手学习!
老手看了说明肯定会啊, 若是难度我一定会上传附件!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:嵌入式技术专家
简介:道阻且长,行则将至!

64

主题

4653

帖子

14

粉丝