K60图像采集程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include "MK60N512VMD100.h " /* include peripheral declarations */
#include "includes.h"
#include "hw_uart.h"
#define GPIO_PIN_MASK 0x1Fu //0x1f=31,限制位数为0--31有效
#define GPIO_PIN(x) (((1)<<(x & GPIO_PIN_MASK))) //把当前位置1
uint8 Date_Buffer[50][50]={0xff,0xff,0xff,0xff};
uint8 comond[4]={0x00,0xff,0x01,0x00};
volatile uint32 count=0;
volatile uint32 flag=0;
//give some delay~~
void delay()
{
int i =0;
int j=0;
for(i=0;i<1000;i++)
for(j=0;j<1000;j++)
asm("nop");
}
//GPIO中断服务函数,每次中断P1P2 LED 常亮
void b_irq (void)
{
DisableInterrupts; //禁止总中断
PORTB_ISFR=1<<9; // Clear the PTB9 interrupt flags
enable_irq(89);
EnableInterrupts;
}
void c_irq(void)
{
uint8 *p=&Date_Buffer[count][0];
DisableInterrupts; //禁止总中断
PORTC_ISFR=1<<8; // Clear the PTC8 interrupt flags
//GPIOA_PDOR &= ~GPIO_PDOR_PDO(GPIO_PIN(14)); //IO口输出低电平,亮 //delay();//暂停
// GPIOA_PDOR |= GPIO_PDOR_PDO(GPIO_PIN(14)); //IO口输出高电平,灭// delay();//暂停
*p++=GPIOB_PDIR&0xff;
*p++=GPIOB_PDIR&0xff;
*p++=GPIOB_PDIR&0xff;
*p++=GPIOB_PDIR&0xff;
*p++=GPIOB_PDIR&0xff;
*p++=GPIOB_PDIR&0xff;
*p++=GPIOB_PDIR&0xff;
*p++=GPIOB_PDIR&0xff;
*p++=GPIOB_PDIR&0xff; //20
*p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; //30
*p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; //40
*p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; //50
*p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff; *p++=GPIOB_PDIR&0xff;
*p++=GPIOB_PDIR&0xff;
count++;
if(count>50)
{
disable_irq(89);
flag=1;
GPIOA_PDOR &= ~GPIO_PDOR_PDO(GPIO_PIN(16)); //IO口输出低电平,P2亮
// delay();
GPIOA_PDOR |= GPIO_PDOR_PDO(GPIO_PIN(16)); //IO口输出低电平,P2灭
// delay();
}
EnableInterrupts;
}
void inti()
{
SIM_SCGC5 = SIM_SCGC5_PORTA_MASK | SIM_SCGC5_PORTB_MASK | SIM_SCGC5_PORTC_MASK | SIM_SCGC5_PORTD_MASK | SIM_SCGC5_PORTE_MASK;
PORTC_PCR8=0|PORT_PCR_MUX(0X01)|PORT_PCR_IRQC(0X09)|PORT_PCR_PE_MASK;// 上降沿下拉电阻行中断
PORTB_PCR9=0|PORT_PCR_MUX(0X01)|PORT_PCR_PS_MASK|PORT_PCR_IRQC(0X0a)|PORT_PCR_PE_MASK;//下降沿上拉电阻场中断
PORTB_PCR0=0|PORT_PCR_MUX(0x01);
PORTB_PCR1=0|PORT_PCR_MUX(0x01);
PORTB_PCR2=0|PORT_PCR_MUX(0x01);
PORTB_PCR3=0|PORT_PCR_MUX(0x01);
PORTB_PCR4=0|PORT_PCR_MUX(0x01);
PORTB_PCR5=0|PORT_PCR_MUX(0x01);
PORTB_PCR6=0|PORT_PCR_MUX(0x01);
PORTB_PCR7=0|PORT_PCR_MUX(0x01);
GPIOB_PDDR=GPIO_PDDR_PDD(0);//设置为输入
GPIOC_PDDR=GPIO_PDDR_PDD(0);//设置为输入
}
void process_picture(uint32 mount)
{
uint32 i;
uint8 *p=(uint8 *)Date_Buffer;
if(flag)
{
DisableInterrupts; //共享资源上锁
for(i=0;i { if(*p<151) { *p=0;