金牌会员
- 积分
- 1064
- 威望
- 430
- 贡献
- 532
- 兑换币
- 6
- 注册时间
- 2009-12-5
- 在线时间
- 51 小时
|
大虾帮忙看看,为什么我的7620摄像头采集程序运行不了,一直是illegal_bp!
#include <hidef.h> /* common defines and macros */
#include <mc9s12xs128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128b"
///////////////////////////////////////////////////////////////
//行同步中断输入捕捉1管脚.
//场同步中断输入捕捉0管脚 IRQ
//Yn分别对应PORTMn
///////////////////////////////////////////////////////////////
#define M 64
#define N 48
unsigned char buff[N][M];
static byte cnt_HREF=0x01;
unsigned char sx[]="01";
static int p=0x00;
char one_sample=0;
void init_CRG(void)
{
REFDV=4; //PLLCLK =2*OSCCLK*(SYNR + 1)/(REFDV + 1) busclk=80M
SYNR=1;
while(!CRGFLG_LOCK);
CLKSEL_PLLSEL=1;
}
void init_interupt() //输入终端初始化
{
TIOS=0x00; //行同步中断,外部输入捕捉0,1通道,初始化不开启
TCTL4=0x09; //通道0上升沿触发,通道1下降沿触发
//TSCR2=0X01; //分频2 (总线时间/2)
TSCR1=0x80; //允许定时器正常运行
TIE_C1I = 1;
TIE_C0I = 1;
//TIE=0X00; //初始化定时器关闭
//TFLG1=0xff;
}
void init_port() //端口初始化
{
//DDRB=0XFF;
//PORTB=0Xaa;
DDRA=0X00;
PUCR=0x03; //A,B上拉电阻控制
}
/*-------串口初始化----------------------*/
void SciInit()
{
SCI0BDL = 65; //38400 (unsigned char)((16000000UL /* OSC freq */ / 2) / 19200 /* baud rate */ / 16 /*factor*/);
SCI0CR1=0; /*normal,no parity 禁止奇偶校验*/
SCI0CR2=0X2C; /*RIE=1,TE=1,RE=1*/
}
void init_sys()
{
init_CRG();
init_interupt();
init_port();
SciInit();
}
/*-------发射端程序-----单字节发送-----------------*/
void SciTx(unsigned char text)
{
while (!(SCI0SR1 & 0x80)); //等待接收数据完毕
SCI0SR1_RDRF = 1;
SCI0DRL=sx[text];
}
void Send_piex(void)
{
byte i,j;
for(i=1;i<N;i++)
{
for(j=0;j<M;j++)
{
if(buff[j] < 0x01)
SciTx(0);
else
SciTx(1);
}
}
}
void main(void)
{
DisableInterrupts;
init_sys();
//TIE=0X02; //开场中断
EnableInterrupts;
for(;;)
{
if(one_sample==1)
{
Send_piex();
one_sample=0;
TIE=0X02;
}
}
}
/***************************行中断处理******************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 Port0_interrupt(void)
{
int i;
TFLG1_C0F=1; //清除中断标志寄存器
p++;
if(p==8)
{
p=0;
TIE=0X00; //关行中断
for(i=0;i<M;i++)
{
buff[cnt_HREF]=PORTA;
}
cnt_HREF++;
if(cnt_HREF >= N)
cnt_HREF=0x01;
one_sample=1;
}
}
/***************************场中断处理******************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 9 Port1_interrupt(void)
{
TFLG1_C1F=1; //清除中断标志寄存器
TIE=0x01; //开行中断 关场中断使能
} |
|