2016/7/25 D180C SPI flash增加代码记录
2016-07-25 10:34
218 查看
D180 boot目前的需求是:
//每天学点有用的东西
*1. 增加开关机功能 //(定时器中断已经完成)
*2 增加boot重启功能 //这暂时没有完成
*3 重建文件系统
*4 Monitor放在外部spi flash校验,然后决定是否写入NOR flash
*5 增加写入MAC地址(已解决)
*6 boot自更新(有点难度)
*7 增加开机提示音
首先解决在boot内关机的操作
*1.boot如何实现关机
一般的boot关机有什么方式呢
关机的应用场景 (1)boot内下载到一半,进行关机,或者出了异常可以关机
(1)定时器中断的方式实现
定义一个全局变量poweroff_keep_watch
代码
该函数在汇编里面定义,定义的中断向量表,函数名既是他的地址
//10秒
void SysTick_Handler(void) //10ms
{
//if(ticks%20==0)
; //gpio_set_pin_val(GPIOC,12,0);// gpio_set_pin_val(GPIOE,8,0); //PiccLight(PICC_LED_BLUE, 1);
//else
if(ticks%10==0) ;//gpio_set_pin_val(GPIOC,12,1); //PiccLight(PICC_LED_BLUE, 0);
volatile int gpio;
int usb_gpio,iLoop;
unsigned int flag;
ticks++;
gulSysRun10msCount++;
gulCheckUpTimeMs++;
updatepowerpicture++;
printf_gcc("Tickhandler\r\n");
//实现定时器关机
gpio = gpio_get_pin_val(GPIOD,9); //开机键
if (0 == gpio)
{
poweroff_keep_watch++;
if (poweroff_keep_watch > 1000)
{
printf_gcc("power off from timer\n");
gpio_set_pin_val(GPIOD,13, 0); //电源管脚,0表示下电
while(1)
{}
}
}
else
{
poweroff_keep_watch = 0;
}
for(iLoop=0;iLoop<CHILD_TIMER_TOT;iLoop++)
{
if(gulTimerRemains[iLoop])
{
gulTimerRemains[iLoop]--;
}
}
}
利用定时器进行关机
如何触发中断呢?
加入的是第一个,关机按键,然后是电源按键
(2)
D180注册中断,一共34个中断
#if defined(__IAR_SYSTEMS_ICC__)
// Suppress the warning message in IAR with non - alligned member in structure.
#pragma diag_suppress=Pa039
#pragma section = "IntVectTable"
#pragma location = "IntVectTable"
__root const vector_entry __vector_table[16+62] =
#elif defined(__ARMCC_VERSION)
#pragma diag_suppress=61
__attribute__((section(".IntVectTable"))) const vector_entry __vector_table[16+60] __attribute__((used)) =
#endif
{
(pointer*)__BOOT_STACK_ADDRESS, /* Initial SP */
(vector_entry)__main, /* Initial PC */
default_isr, /* Non-maskable Interrupt (NMI) */
default_isr, /* Hard Fault */
default_isr, /* MemManage Fault */
default_isr, /* Bus Fault */
default_isr, /* Usage Fault */
default_isr, /* Usage Fault */
default_isr, /* Non-maskable Interrupt (NMI) */
default_isr, /* Hard Fault */
default_isr, /* MemManage Fault */
default_isr, /* Bus Fault */
default_isr, /* Usage Fault */
default_isr, /* Usage Fault */
default_isr, /* Non-maskable Interrupt (NMI) */
SysTick_Handler, /* VECTOR_015, system tick timer*/
default_isr, /* no use*/
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
UART2_ISR,
UART2_ISR_ERR,
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
USB_IRQHandler, //#define VECTOR_069 USB_IRQHandler
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
PORTA_IRQHandler,/* USB 充电管理 */
default_isr,
PORTC_IRQHandler /*开关机中断处理函数*/
};
使用数组定义中断
外部添加spi flash功能 2016.7.27
如何在D180C添加SPI flash接口呢
boot自更新思路
D180 boot自更新
小sMonitor代码 三要书
(1)ld文件有一部分
043
.LowPower : AT(Image__data__End)
{
. = ALIGN(4);
sram_sector_start = .;
*(.LowPower)
. = ALIGN(4);
sram_sector_end = .;
}>sram
(2) SECTION_SRAM void Sram_Entry_Sleep()
(3)init.s
/*copy low power consumption code to sram*/
LDR R3, =sram_sector_start
//每天学点有用的东西
*1. 增加开关机功能 //(定时器中断已经完成)
*2 增加boot重启功能 //这暂时没有完成
*3 重建文件系统
*4 Monitor放在外部spi flash校验,然后决定是否写入NOR flash
*5 增加写入MAC地址(已解决)
*6 boot自更新(有点难度)
*7 增加开机提示音
首先解决在boot内关机的操作
*1.boot如何实现关机
一般的boot关机有什么方式呢
关机的应用场景 (1)boot内下载到一半,进行关机,或者出了异常可以关机
(1)定时器中断的方式实现
定义一个全局变量poweroff_keep_watch
代码
该函数在汇编里面定义,定义的中断向量表,函数名既是他的地址
//10秒
void SysTick_Handler(void) //10ms
{
//if(ticks%20==0)
; //gpio_set_pin_val(GPIOC,12,0);// gpio_set_pin_val(GPIOE,8,0); //PiccLight(PICC_LED_BLUE, 1);
//else
if(ticks%10==0) ;//gpio_set_pin_val(GPIOC,12,1); //PiccLight(PICC_LED_BLUE, 0);
volatile int gpio;
int usb_gpio,iLoop;
unsigned int flag;
ticks++;
gulSysRun10msCount++;
gulCheckUpTimeMs++;
updatepowerpicture++;
printf_gcc("Tickhandler\r\n");
//实现定时器关机
gpio = gpio_get_pin_val(GPIOD,9); //开机键
if (0 == gpio)
{
poweroff_keep_watch++;
if (poweroff_keep_watch > 1000)
{
printf_gcc("power off from timer\n");
gpio_set_pin_val(GPIOD,13, 0); //电源管脚,0表示下电
while(1)
{}
}
}
else
{
poweroff_keep_watch = 0;
}
for(iLoop=0;iLoop<CHILD_TIMER_TOT;iLoop++)
{
if(gulTimerRemains[iLoop])
{
gulTimerRemains[iLoop]--;
}
}
}
利用定时器进行关机
如何触发中断呢?
加入的是第一个,关机按键,然后是电源按键
(2)
D180注册中断,一共34个中断
#if defined(__IAR_SYSTEMS_ICC__)
// Suppress the warning message in IAR with non - alligned member in structure.
#pragma diag_suppress=Pa039
#pragma section = "IntVectTable"
#pragma location = "IntVectTable"
__root const vector_entry __vector_table[16+62] =
#elif defined(__ARMCC_VERSION)
#pragma diag_suppress=61
__attribute__((section(".IntVectTable"))) const vector_entry __vector_table[16+60] __attribute__((used)) =
#endif
{
(pointer*)__BOOT_STACK_ADDRESS, /* Initial SP */
(vector_entry)__main, /* Initial PC */
default_isr, /* Non-maskable Interrupt (NMI) */
default_isr, /* Hard Fault */
default_isr, /* MemManage Fault */
default_isr, /* Bus Fault */
default_isr, /* Usage Fault */
default_isr, /* Usage Fault */
default_isr, /* Non-maskable Interrupt (NMI) */
default_isr, /* Hard Fault */
default_isr, /* MemManage Fault */
default_isr, /* Bus Fault */
default_isr, /* Usage Fault */
default_isr, /* Usage Fault */
default_isr, /* Non-maskable Interrupt (NMI) */
SysTick_Handler, /* VECTOR_015, system tick timer*/
default_isr, /* no use*/
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
UART2_ISR,
UART2_ISR_ERR,
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
USB_IRQHandler, //#define VECTOR_069 USB_IRQHandler
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
default_isr, /* no use */
PORTA_IRQHandler,/* USB 充电管理 */
default_isr,
PORTC_IRQHandler /*开关机中断处理函数*/
};
使用数组定义中断
外部添加spi flash功能 2016.7.27
如何在D180C添加SPI flash接口呢
boot自更新思路
D180 boot自更新
小sMonitor代码 三要书
(1)ld文件有一部分
043
.LowPower : AT(Image__data__End)
{
. = ALIGN(4);
sram_sector_start = .;
*(.LowPower)
. = ALIGN(4);
sram_sector_end = .;
}>sram
(2) SECTION_SRAM void Sram_Entry_Sleep()
(3)init.s
/*copy low power consumption code to sram*/
LDR R3, =sram_sector_start
相关文章推荐
- 细谈select函数(C语言)
- 细谈select函数(C语言)
- java学习资源分享
- jvm类加载器
- Ubuntu 安装 python3.5
- Selenium应用代码(常见封装的方法二)
- try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,还是在return之后执行?
- FastCgi与PHP-fpm之间是个什么样的关系
- 《Python核心编程》第二版--第三章 Python基础
- java图片验证码生成教程详解
- POJ3069 萨鲁曼的大军(重庆一中高2018级信息学竞赛测验3) 解题报告
- 教你如何搭建自己的FTP服务器
- Python学习笔记--2016.07.25
- 5-23 还原二叉树
- Java中Native关键字的作用
- python在windows下获取cpu、硬盘、bios、主板序列号
- Java之JUC系列:外部Tools
- Matlab实现将excel文件数据写到txt文件中
- Java的4种Json类库介绍
- Windows中安装jdk,出现javac不是内部或外部命令 也不是可运行的程序