在线时间0 小时
UID350123
注册时间2012-3-29
NXP金币0
该用户从未签到
新手上路

- 积分
- 0
- 最后登录
- 1970-1-1
|
#include "MK60N512VMD100.h
#include "includes.h"
uint8 image_data[27][200];//存放数据数组
uint16 row=0;//摄像头行计数
uint8 imagerow=0;//采集行计数
uint8 flag_image=0,flag_DMA=0;//标志一场采集结束
uint16 data_table[]={46,53,68,83,97,109,120,130,139,147,
155,163,170,178,186,192,197,202,206,210,
214,218,222,225,228,231,234};
int8 chang,hang,dma;
void pllinit180M(void)
{
uint32_t temp_reg;
//使能IO端口时钟
//这里处在默认的FEI模式
//首先移动到FBE模式
MCG_C2 = 0;
//MCG_C2 = MCG_C2_RANGE(2) | MCG_C2_HGO_MASK | MCG_C2_EREFS_MASK;
//初始化晶振后释放锁定状态的振荡器和GPIO
SIM_SCGC4 |= SIM_SCGC4_LLWU_MASK;
LLWU_CS |= LLWU_CS_ACKISO_MASK;
//选择外部晶振,参考分频器,清IREFS来启动外部晶振
//011 If RANGE = 0, Divide Factor is 8; for all other RANGE values, Divide Factor is 256.
MCG_C1 = MCG_C1_CLKS(2) | MCG_C1_FRDIV(3);
//等待晶振稳定
//while (!(MCG_S & MCG_S_OSCINIT_MASK)){} //等待锁相环初始化结束
while (MCG_S & MCG_S_IREFST_MASK){} //等待时钟切换到外部参考时钟
while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x2){}
//进入FBE模式,
MCG_C5 = MCG_C5_PRDIV(0x0e);//分频在2~4MHz之间,分频后频率=晶振频率/(PRDIV+1) 3.3MHz
MCG_C6 = 0x0;//确保MCG_C6处于复位状态,禁止LOLIE、PLL、和时钟控制器,清PLL VCO分频器
temp_reg = FMC_PFAPR;//保存FMC_PFAPR当前的值
FMC_PFAPR |= FMC_PFAPR_M7PFD_MASK | FMC_PFAPR_M6PFD_MASK | FMC_PFAPR_M5PFD_MASK
| FMC_PFAPR_M4PFD_MASK | FMC_PFAPR_M3PFD_MASK | FMC_PFAPR_M2PFD_MASK
| FMC_PFAPR_M1PFD_MASK | FMC_PFAPR_M0PFD_MASK; //通过M& FD置位M0PFD来禁止预取功能
///设置系统分频器
//MCG=PLL, core = MCG, bus = MCG/3, FlexBus = MCG/3, Flash clock= MCG/8
SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIV1(0) | SIM_CLKDIV1_OUTDIV2(2)
| SIM_CLKDIV1_OUTDIV3(2) | SIM_CLKDIV1_OUTDIV4(7);
FMC_PFAPR = temp_reg;//从新存FMC_PFAPR的原始值
//设置VCO分频器,使能PLL为100MHz, LOLIE=0, PLLS=1, CME=0, VDIV=26
MCG_C6 = MCG_C6_PLLS_MASK | MCG_C6_VDIV(30); //VDIV = 31 (x54)
//VDIV = 26 (x50)
while (!(MCG_S & MCG_S_PLLST_MASK)){}; // wait for PLL status bit to set
while (!(MCG_S & MCG_S_LOCK_MASK)){}; // Wait for LOCK bit to set
//进入PBE模式
//通过清零CLKS位来进入PEE模式
// CLKS=0, FRDIV=3, IREFS=0, IRCLKEN=0, IREFSTEN=0
MCG_C1 &= ~MCG_C1_CLKS_MASK;
//等待时钟状态位更新
while (((MCG_S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) != 0x3){};
}
//数码管显示速度值
void GPIO_Init()
{
//LED
gpio_init (PORTA,14,1,1);
gpio_init (PORTA,15,1,0);
gpio_init (PORTA,16,1,0);
gpio_init (PORTA,17,1,1);
//DMA
PORTD_PCR0=PORT_PCR_MUX(1);//B0引脚设置为GPIO模式
PORTD_PCR1=PORT_PCR_MUX(1);//B1引脚设置为GPIO模式
PORTD_PCR2=PORT_PCR_MUX(1);//B2引脚设置为GPIO模式
PORTD_PCR3=PORT_PCR_MUX(1);//B3引脚设置为GPIO模式
PORTD_PCR4=PORT_PCR_MUX(1);//B4引脚设置为GPIO模式
PORTD_PCR5=PORT_PCR_MUX(1);//B5引脚设置为GPIO模式
PORTD_PCR6=PORT_PCR_MUX(1);//B6引脚设置为GPIO模式
PORTD_PCR7=PORT_PCR_MUX(1);//B7引脚设置为GPIO模式
GPIOD_PDDR&=0XFFFFFF00;//D0~D7设置为输入,数字摄像头8位灰度输入
PORTB_PCR22=PORT_PCR_MUX(1)|PORT_PCR_IRQC(1);//上升沿触发DMA请求
GPIOB_PDDR&=~(1
|
|