01 - 作业所在路径
ARM裸机1期加强版\源码文档图片\文档图片\第015课_NOR_Flash
02 - 作业描述
2.1 - 作业1
实现一个关中断、开中断的函数,在测试NOR FLASH时关中断,测完后开中断。这样就不需要注释掉timer的中断函数了
2.2 - 作业2
第003节_NorFlash编程_擦写读,这个程序写得不好,应该把nor_read, nor_write, nor_erase单独实现出来,现在都是内嵌在do_read_nor_flash、do_write_nor_flash、do_erase_nor_flash里了。请实现nor_read, nor_write, nor_erase函数,再在do_xxx中调用它们
03 - 作业解答
3.1 - 作业1解答
实现一个关中断、开中断的函数,在测试NOR FLASH时关中断,测完后开中断。这样就不需要注释掉timer的中断函数了
interrupt.c中定义全局变量EINTMASK_val和INTMSK_val,用于储存上一个值
再定义函数enable_interrupt()
和mask_interrupt()
,要先使用mask_interrupt()
,再使用enable_interrupt()
#define MASK_EINTMASK 0x00FFFFF0
#define MASK_INTMSK 0xFFFFFFFF
unsigned int EINTMASK_val;
unsigned int INTMSK_val;
/**
* @brief 使能中断,恢复EINTMASK寄存器的值
* @param NONE
* @retval None
*/
void enable_interrupt(void)
{
//当前不需要修改
if(MASK_EINTMASK != EINTMASK || MASK_INTMSK != INTMSK)
{
printf("[OK] interrupts are already enable\r\n");
return;
}
EINTMASK = EINTMASK_val;
INTMSK = INTMSK_val;
printf("[OK] enable interrupt\r\n");
}
/**
* @brief 屏蔽所有中断,先保存原来EINTMASK/INTMSK的值,然后对EINTMASK/INTMSK所有位置1
* @param NONE
* @retval None
*/
void mask_interrupt(void)
{
if(MASK_EINTMASK == EINTMASK || MASK_INTMSK == INTMSK)
{
printf("[OK] interrupts are already masker\r\n");
return;
}
//保存
EINTMASK_val = EINTMASK;
INTMSK_val = INTMSK;
//屏蔽
EINTMASK = MASK_EINTMASK;
INTMSK = MASK_INTMSK;
printf("[OK] mask interrupt\r\n");
}
3.2 - 作业2解答
第003节_NorFlash编程_擦写读,这个程序写得不好,应该把nor_read, nor_write, nor_erase单独实现出来,现在都是内嵌在do_read_nor_flash、do_write_nor_flash、do_erase_nor_flash里了。请实现nor_read, nor_write, nor_erase函数,再在do_xxx中调用它们
分离出来,再根据函数进行调用即可
void _nor_write(unsigned int addr, unsigned int data)
{
nor_write_word(0x555,0xaa); //解锁
nor_write_word(0x2aa,0x55);
nor_write_word(0x555,0xa0); //program命令
nor_write_word(addr,data); //写入
}
void _nor_earse(unsigned int addr)
{
nor_write_word(0x555,0xaa); //解锁
nor_write_word(0x2aa,0x55);
nor_write_word(0x555,0x80); //erase命令
nor_write_word(0x555,0xaa); //解锁
nor_write_word(0x2aa,0x55);
nor_write_word(addr,0x30); //擦除
}
unsigned char _nor_read(unsigned char *addr)
{
return *addr;
}
04 - 作业源码分享
百度网盘 提取码:t46h