以下是代码,目的是用systick计数产生一个周期为0.5us的方波信号,供以后测试用,但是频率我弄不出来,这个好像是才100khz左右,,大家看看我哪里出错了吗?谢谢!
/****************************************************
*名 称: LPC1114测试文件 *
*功 能: 测试文件 *
*备 注: 2013.3.01 *
*****************************************************/
/**************** 头文件调用&&宏定义 ****************/
#include "LPC11xx.h"
#include "GPIO.H"
#define uchar unsigned char
#define up_1() GPIOSetValue(PORT1,4,1) //引脚高电平"1"
#define down_0() GPIOSetValue(PORT1,4,0) //引脚低电平"0"
int fac_us = 0;
/********************** 函数声明 ********************/
void UserIO(void);
void send_24bits(uchar dat1,uchar dat2,uchar dat3);
void Delay_qua_us(uint32_t nus);
void Delay_Init(void);
void CLKOUT_EN(uint8_t CLKOUT_DIV);
/********************** 主函数 **********************/
int main(void)
{
SystemInit(); //系统初始化,包括使能时钟
GPIOInit(); //GPIO初始化,使能GPIO模块时钟
UserIO();
Delay_Init();
CLKOUT_EN(1);
while(1)
{
up_1();
Delay_qua_us(1);
down_0();
Delay_qua_us(1);
}
}
/****************************************************
*名 称: UserIO *
*参 数: 无 *
*备 注: 用户IO配置,初始化函数 *
*****************************************************/
void UserIO(void)
{
GPIOSetDir(PORT1,4,1); //DATA out
}
/*定时器初始化函数*/
void Delay_Init() //SYSCLK为系统时钟频率除以1000000后的值,例:如果系统时钟频率为72MHz,则调用该函数时此处的实参为72
{ fac_us = 12; // 取48 延时1us
SysTick->CTRL |= ~(0xFFFFFFFB); //BIT2取0用外部时钟源STCLK=HCLK/8,BIT2取1用内核时钟源FCLK=HCLK. 1011 取反变成 0100 跟原来数据想或, BIT2变成1,其它位不变。
}
/*0.25微秒延时函数*/
void Delay_qua_us(uint32_t nus)
{
SysTick->LOAD = nus*fac_us; //重新装入寄存器
SysTick->VAL &= 0x00; //清零
SysTick->CTRL |= 0x01; //使能定时器
while(!(SysTick->CTRL&0x00010000));//等待计数完成
SysTick->CTRL &= 0x00; //关闭计数器
SysTick->VAL &= 0x00; //清零
}
|