?? common.c
字號:
//-------------------------------------------------------------------------*
// 文件名: common.h (通用頭文件) *
// 說 明: *
//-------------------------------------------------------------------------*
#include "common.h"
//-------------------------------------------------------------------------*
//函數(shù)名: stop *
//功 能: 設(shè)置CPU為STOP模式 *
//參 數(shù): 無 *
//返 回: 無 *
//說 明: 無 *
//-------------------------------------------------------------------------*
void stop (void)
{
//置位SLEEPDEEP來使能STOP模式
SCB_SCR |= SCB_SCR_SLEEPDEEP_MASK;
//進(jìn)入STOP模式
asm("WFI");
}
//-------------------------------------------------------------------------*
//函數(shù)名: wait *
//功 能: 設(shè)置CPU為WAIT模式 *
//參 數(shù): 無 *
//返 回: 無 *
//說 明: 無 *
//-------------------------------------------------------------------------*
void wait (void)
{
//清SLEEPDEEP位來確定進(jìn)入WAIT模式
SCB_SCR &= ~SCB_SCR_SLEEPDEEP_MASK;
//進(jìn)入WAIT模式
asm("WFI");
}
//-------------------------------------------------------------------------*
//函數(shù)名: write_vtor *
//功 能: 更改中斷向量表偏移寄存器的值 *
//參 數(shù): 要更改的值 *
//返 回: 無 *
//說 明: 無 *
//-------------------------------------------------------------------------*
void write_vtor (int vtor)
{
//寫新值
SCB_VTOR = vtor;
}
//-------------------------------------------------------------------------*
//函數(shù)名: enable_irq *
//功 能: 使能irq中斷 *
//參 數(shù): irq:irq號 *
//返 回: 無 *
//說 明: irq號不是中斷向量號 *
//-------------------------------------------------------------------------*
void enable_irq (int irq)
{
int div;
//確定irq號為有效的irq號
if (irq > 91) irq=91;
//確定對應(yīng)的NVICISER
div = irq/32;
switch (div)
{
case 0x0:
NVICICPR0 = 1 << (irq%32);
NVICISER0 = 1 << (irq%32);
break;
case 0x1:
NVICICPR1 = 1 << (irq%32);
NVICISER1 = 1 << (irq%32);
break;
case 0x2:
NVICICPR2 = 1 << (irq%32);
NVICISER2 = 1 << (irq%32);
break;
}
}
//-------------------------------------------------------------------------*
//函數(shù)名: disable_irq *
//功 能: 禁止irq中斷 *
//參 數(shù): irq:irq號 *
//返 回: 無 *
//說 明: irq號不是中斷向量號 *
//-------------------------------------------------------------------------*
void disable_irq (int irq)
{
int div;
//確定irq號為有效的irq號
if (irq > 91) irq=91;
//確定對應(yīng)的NVICISER
div = irq/32;
switch (div)
{
case 0x0:
NVICICER0 = 1 << (irq%32);
break;
case 0x1:
NVICICER1 = 1 << (irq%32);
break;
case 0x2:
NVICICER2 = 1 << (irq%32);
break;
}
}
//-------------------------------------------------------------------------*
//函數(shù)名: set_irq_priority *
//功 能: 設(shè)置irq中斷和優(yōu)先級 *
//參 數(shù): irq:irq號 *
// prio:優(yōu)先級 *
//返 回: 無 *
//說 明: irq號不是中斷向量號 *
//-------------------------------------------------------------------------*
void set_irq_priority (int irq, int prio)
{
uint8 *prio_reg;
//確定irq號和優(yōu)先級有效
if (irq > 91) irq=91;
if (prio > 15) prio=15;
//確定對應(yīng)的NVICISER
prio_reg = (uint8 *)(((uint32)&NVICIP0) + irq);
//設(shè)置優(yōu)先級
*prio_reg = ( (prio&0xF) << (8 - ARM_INTERRUPT_LEVEL_BITS) );
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -