注册会员
- 积分
- 171
- 威望
- 129
- 贡献
- 42
- 兑换币
- 0
- 注册时间
- 2012-9-5
- 在线时间
- 7 小时
- 毕业学校
- 西安电子科技大学
|
主程序如下,主要是从摄像头采集图像后给430再串口发送给PC,但无论是哪种发送方法收到数据都严重不全。。求大虾指导。。
#include<msp430x14x.h>
#include"delay.h"
#include"ov7670.h"
#include"UART.h"
unsigned char bn=0;
void initsys(void)
{
BCSCTL1 &= ~XT2OFF;
unsigned char i;
do
{
IFG1 &= ~OFIFG;
for(i=0xee;i>0;i--)
{
;
}
}
while((IFG1&OFIFG)!=0);
BCSCTL2 |= SELM_2 + SELS+DIVS_3;
}
void set()
{
U0CTL |= SWRST; //开启设置
U0TCTL = SSEL1; //选择 SMCLK=8M 波特率=115200
/* 8M /115200 = 69.4444 69 = 0x45 0.444* 8= 3.552~4*/
/* 32768/9600=3.4133 0.4133*8=4*/
U0BR0 = 0x45;
U0BR1 = 0x00;
U0MCTL =0x55;
U0CTL |= CHAR; //长度8位
U0CTL &= ~SWRST;
}
void main (void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
// unsigned int a=0;
unsigned char c_data=0;
volatile unsigned int i,j;
initsys();
P3SEL |= 0x30;
set();
ME1 |= UTXE0 + URXE0;
IE1 |= URXIE0;
FIFO_CS_L();
FIFO_WE_H();
while(1!=Sensor_init());//初始化CMOS Sensor
// ov7670_Size(624,0,10,130);
bn=0;
FIFO_RRST_L();
FIFO_RD_L();
FIFO_RD_H();
FIFO_RD_L();
FIFO_RRST_H();
FIFO_RD_H();
_EINT();
while(1)
{
if(bn==2)
{
FIFO_RRST_L();
FIFO_RD_L();
FIFO_RD_H();
FIFO_RD_L();
FIFO_RRST_H();
FIFO_RD_H();
for(i = 0; i < 60; i ++) //QVGA格式,60行;每行80个点
{
for(j = 0; j < 80*2; j ++)
{
FIFO_RD_L();
c_data=CAMERA2MCU_Data;
FIFO_RD_H();
UART0_PutChar(c_data);//中断内发送
//TXBUF0=c_data; //阻塞CPU直接发送
}
}
//while(1);
bn=0;
}
}
}
#pragma vector=PORT2_VECTOR
__interrupt void Port_1(void)
{
if(bn==0)
{
bn=1;
FIFO_WE_H();
}
else if(bn==1)
{
FIFO_WE_L();
bn=2;
}
P2IFG = 0; //清除标志位
}
//
#pragma vector=UART0TX_VECTOR
__interrupt void UART_TX (void) // 串口发送中断
{
if(UART_OutLen>0) // FIFO内是否有待发送的数据?
{
UART_OutLen--; // 待发送数据字节数减1
U0TXBUF=TX_BUFF[TX_IndexR]; // 从尾指针读取一个字节并发送
if (++TX_IndexR >= TXBUF_SIZE)// 读指针递增,且判断是否下标越界
{
TX_IndexR = 0; // 如果越界则写指针归零(循环队列)
}
}
else IE1 &=~ UTXIE0; // 如果数据已发完,则关闭UART0的发送中断,停止发送
}
|
|