智能车制作
标题:
求教我的摄像头程度有哪错误吗?串口不能向上位机传输数据,,,
[打印本页]
作者:
刘亚鑫
时间:
2013-5-24 16:25
标题:
求教我的摄像头程度有哪错误吗?串口不能向上位机传输数据,,,
#include "common.h"
#include "HAL_MCG.H"
#include "HAL_FTM.h"
#include "HAL_LPTMR.H"
#include "HAL_GPIO.h"
#include "HAL_ADC.h"
#include "HAL_eDMA.h"
#include "HAL_UART.h"
//函数声明
void portb_handle(void);
void porte_handle(void);
void DelayUs(uint16 t);
void DelayMs(uint16 t);
void Send_Data(void);
//变量定义
#define SAMP_ROW_END 233
#define IMAGE_ROW 40
#define IMAGE_COLUMN 200
uint8 uc_FrameBuffer[IMAGE_ROW][IMAGE_COLUMN]={0};//图像数据缓存区uc_FrameBuffer[11200]
uint8 uc_ImageOver=FALSE;// 采集完成标志
uint8 ui_OddFieldFlag=FALSE;
uint8 send_F=TRUE;//发送完成标志,1表示发送完成
uint16 *Sample_point;
uint16 SampleRow[40] = {39,42,47,53,58,63,68,73,78,83,88,93,98,103,108,113,118,123,128,133,138,143,148,153,158,163,168,173,178,183,188,193,198,203,208,213,218,223,228,233}; //前160行中要采集的行 曲线拟合 查表
// 0 1 2 3 3 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 31 32 33 34 35 36 37 38 39
#define DMA_MAX_NUM (hang_end)
LPLD_eDMA_Cfg_t User_Def_DMA_Init_a;//声明DMA初始化结构体
void main(void)
{
DisableInterrupts;
LPLD_PLL_Setup(PLL_200); //设置PLL,启动系统始终,80MHZ
////打开所有IO 时钟
LPLD_ADC_Init(ADC0, MODE_8, CONV_SING); //AD0模块,8位精度,单端输入
LPLD_ADC_Channel_Init(ADC0, 8 ,ADC_DMA_ENABLE,NULL);
//DMA初始化结构体赋值
User_Def_DMA_Init_a.Channelx =DMA_CH0; //设置为通道0,通道0采集第一路脉冲输出
User_Def_DMA_Init_a.Peri_DmaReq =ADC0_DMAREQ; //ADC0产生DMA请求
User_Def_DMA_Init_a.Minor_loop_Length =IMAGE_COLUMN; //主循环次数
User_Def_DMA_Init_a.Trans_bytesNum =1;//每一次DMA请求后,传输的字节个数
User_Def_DMA_Init_a.Source_Addr =(uint32_t)&(ADC0_RA); //设置源地址,
User_Def_DMA_Init_a.Source_Size =DMA_SRC_8BIT;//源地址数据长度为: 8bit
User_Def_DMA_Init_a.Source_Addr_inc =ADDR_HOLD;//执行完一次DMA操作以后,地址不变
User_Def_DMA_Init_a.Dest_Addr =(uint32_t)(uc_FrameBuffer); //
User_Def_DMA_Init_a.Dest_Size =DMA_SRC_8BIT; //数据长度为: 8bit
User_Def_DMA_Init_a.Dest_Addr_inc =ADDR_INCREASE; //目的地址加1
User_Def_DMA_Init_a.Dma_irqc =2;//开DMA中断
User_Def_DMA_Init_a.Dma_AutoClose =0;
LPLD_DMA_Init(&User_Def_DMA_Init_a);
//LPLD_FTM0_PWM_Init(10000);//输入期望频率值 FTM1
//LPLD_FTM0_PWM_Open(0, 0);//相应PWM通道开启,并配置占空比。PTC1引脚 电机
//LPLD_FTM1_PWM_Init(50);//输入期望频率值 FTM1
//LPLD_FTM1_PWM_Open(0, 75);//相应PWM通道开启,并配置占空比。pta8 舵机
//LPLD_LPTMR_Init(MODE_PLACC, 0, LPTMR_ALT2, 0, NULL); //PTC5,脉冲累加,不使能中断 编码器
LPLD_GPIO_Init(PTB, 1, DIR_INPUT, INPUT_PUP, IRQC_RI); //行中断接PTB1通道,输入,上拉电阻,上升沿中断,
LPLD_GPIO_Init(PTE, 0, DIR_INPUT, INPUT_PUP, IRQC_FA); //场中断接PTE0通道,输入,上拉电阻,下升沿中断,
LPLD_GPIO_SetIsr(PTB,portb_handle); //设置GPIO通道用户定义的中断服务函数,同时使能相应中断。
LPLD_GPIO_SetIsr(PTE,porte_handle);
LPLD_UART_Init(UART0, 38400);//PTB17
EnableInterrupts;
while(1)
{
if(uc_ImageOver==TRUE)
{
Send_Data();//串口发送169ms左右
enable_irq(91);
uc_ImageOver=FALSE;
}
}
}
void portb_handle()
{
PORTB_ISFR = (PORTB_ISFR|(1<<1)); //清中断
static uint16 ui_SampleRow=0; //采集的行数
ui_SampleRow++;//行计数
if(ui_SampleRow==*Sample_point) //判断是否为采集的行
{
DMA_ERQ|=DMA_ERQ_ERQ0_MASK;//使能通道0硬件DMA请求
}
if(ui_SampleRow>=SAMP_ROW_END)
{
uc_ImageOver=TRUE;
ui_SampleRow=0; //清采集图像上行
disable_irq(88); //关行中断
}
}
void porte_handle()
{
PORTE_ISFR = (PORTE_ISFR|(1<<0)); //清中断
LPLD_DMA_Init(&User_Def_DMA_Init_a);
Sample_point=SampleRow;//赋地址指针
enable_irq(88);//使能行中断
}
void DMA0_isr(void){
DMA_INT|=DMA_INT_INT0_MASK; //清除通道0中断
Sample_point++;
}
//延时函数
void DelayUs(uint16 t){
uint16 i,j;
for(j=0;j<t;j++){
for(i=0;i<60;i++){
}
}
}
void DelayMs(uint16 t){
uint16 i,j;
for(j=0;j<t;j++){
for(i=0;i<20000;i++){
}
}
}
void Send_Data(void)
{
uint8 l,r;
for(r=0;r<IMAGE_ROW;r++)
{
for(l=0;l<IMAGE_COLUMN;l++)
{
LPLD_UART_PutChar(UART0, uc_FrameBuffer[r][l]);
}
}
}
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2