?? main.c
字號:
/****************************************Copyright (c)**************************************************
**--------------File Info-------------------------------------------------------------------------------
** File name: main.c
** Last modified Date: 2007-04-16
** Last Version: 1.0
** Descriptions: The main() function example template
********************************************************************************************************/
#include "config.h"
#include "stdlib.h"
#include "BUxx_Sample.h"
#include "BUxx_aDSC.h"
#include "BUxx_Main.h"
#include "main.h"
#include "I2C.h"
#include "zlg7290.h"
#include "target.h"
#include "UART0.h"
#include "lcddrive.h"
#include "UART0.h"
#include "hpi32.h"
#include "fat32.h"
#define KEY1 1<<20 // 定義按鍵
#define HcRECT (1<<10) // FOR RESET
#define UART_BPS 115200 // 定義通訊波特率
#define ZLG7290 0x70 // 定義器件地址
#define BEEP (1 << 7) /* P0.07為蜂鳴器 */
#define KEY_INT 1<<30 // 定義p0.30為 按鍵中斷
#define LEDCON 0xf0000000
char SendBuf[16];
UINT32 jpeg_size = JPEG_BUFFER; //定義最大JPEG尺寸_
//UINT16 * start_add = (UINT16 *) 0x80400000; //定義放置DATA的起始地址
static UINT16 start_add[1024*100];
#define ARMMJPEG_BUFFER (256*1024)
UINT32 ARMmjsize = ARMMJPEG_BUFFER;
#define TaskStkLengh 512 //Define the Task0 stack length 定義用戶任務0的堆棧長度
#define TASK_STK_SIZE 128
#define CMD_SD_INIT 0x00 /* 卡初始化卡命令 */
#define CMD_SD_READ 0x01 /* 卡讀命令 */
#define CMD_SD_WRITE 0x02 /* 卡寫命令 */
#define CMD_SD_ERASE 0x03 /* 卡擦除命令 */
#define CMD_DATA_TRANS 0x04 /* 將sd_buf中的數據發送到PC機 */
#define CMD_DATA_RECV 0x05 /* 接收來自串口的數據,并放入sd_buf中 */
/* SD/MMC卡讀寫緩沖區,比SDMMC卡一個塊大8字節 */
uint8 sd_buf[520];
OS_STK TaskStartStk[TASK_STK_SIZE];
OS_STK TaskStk0[TaskStkLengh]; //Define the Task0 stack 定義用戶任務0的堆棧
OS_STK TaskStk1[TaskStkLengh]; //Define the Task1 stack 定義用戶任務1的堆棧
OS_STK TaskStk2[TaskStkLengh]; //Define the Task2 stack 定
OS_STK TaskStk[TASK_STK_SIZE]; /* 任務堆棧 */
OS_STK Task0Stk [TaskStkLengh]; // 定義用戶任務0的堆棧
OS_STK Task1Stk [TaskStkLengh]; // 定義用戶任務1的堆棧
OS_STK TaskCardStk[TASK_STK_SIZE]; /* 卡操作任務堆棧 */
OS_EVENT *Uart0ReviceMbox; /* 串口接收數據郵箱 */
void Task0(void *pdata); // 任務0
extern void C_Entry(void);
extern void __irq aDSC_int_disp(void);
extern void UART0SendStr(char *str);
/****************************************************************************
* 名 稱:main()
****************************************************************************/
int main(void)
{
// UINT8 Key = 0;
//UINT8 init_once = 0;
char *start = "WELCOME"; //write Frame jpeg
//static UINT16 start_add[100*1024];
/************************ 初始化SD card *************************/
UINT8 *pRec;
UINT8 err;
UINT32 bufaddr,blockaddr,blocknum;
uint16 temp;
// pdata = pdata;
/************************ 初始化中斷 *************************/
PINSEL0 = 0x00000000; // 設置管腳連接GPIO
PINSEL1 = 0x00000000;
/************************ 初始化DSP *************************/
Reset_BU1566(); //Reset BU1566
// INIT_BU1566(); //BU1566 中斷設定
/* 目標板初始化 */
/******************* 初始化LCD and CAM 初始化串口************/
GUI_Initialize(); // 初始化ARM 上的 LCD
C_Entry(); // 初始化屏,刷BU1566屏紅藍色
sStartPreview();
/******************* 初始化串口************/
UART0Init(115200); // 初始化UART0 為打印日期用的
Time0Init(); // 初始化定時器0 為測試串口用
/******************* CMD_SD_INIT 初始化************/
temp = SD_Initialize(); /* 初始化SD卡 */
// EnumSdDev(); //讀取sd卡系統信息
// CreateFile(0,"abcdef.jpg",0);//創建文件,文件名為8位
sJPEGCEncode((UINT16 *) start_add, 19);
// WriteFile(len,ubuf);//寫數據,len=數據長度,ubuf=數據
sJPEGDecode((UINT16 *) start_add,&jpeg_size);
}
/****************************************************************************
* 名 稱:Reset_BU1566()
* 功 能:reset BU1566
* 入口參數:無
* 出口參數:無PINSEL0 &=~((0x3<<20)|(0xA<<0));
****************************************************************************/
void Reset_BU1566(void)
{
UINT8 i;
PINSEL0 &=~(0x3<<20); // 設置管腳po.10為連接GPIO輸出
IO0DIR |= HcRECT; // 設置 P0.10為I/O為輸出
//直接寫以下設定P0.10為輸出也可
// IO0PIN = HcRECT;
IO0SET = HcRECT; // BEEPCON = 1
for(i =0; i < 40; i ++);
IO0CLR = HcRECT; // BEEPCON = 0
for(i =0; i < 40; i ++);
IO0SET = HcRECT;
for(i =0; i < 40; i ++); // BEEPCON = 1
}
/****************************************************************************
* 名 稱:INIT_BU1566()
* 功 能:BU1566的中斷。
* 入口參數:無
* 出口參數:無
****************************************************************************/
void INIT_BU1566(void)
{
//p0.16 INT pin
// PINSEL0 &=~(0xA<<0); // 設置管腳連接GPIO ,設置I/O連接到UART0
// PINSEL0 |= 0x00000005; // 設置管腳連接GPIO ,設置I/O連接到UART0
PINSEL1 |= 0x00000001; // 設置管腳連接,P0.16設置為EINT0
EXTMODE = 0x0f; // 設置EINT0中斷為邊沿觸發模式
EXTPOLAR = 0x00; //下降沿有或低電平
//為直接設定通道數,如spi為10=A
VICVectCntl7 = (0x20|0x0E); // 設置EINT0分配到IRQslot1
VICVectAddr1 = (int) aDSC_int_disp; // 設置中斷服務程序地 址
VICIntEnable = 1<<14; // 使能EINT0中斷,EINT0在Bit14上
// VICIntEnable = 0x00004000; //使能EINT0中斷,EINT0在Bit14
}
/****************************************************************************
* 名 稱:Time0Init()
* 功 能:初始化定時器0,定時時間為1S。
* 入口參數:無
* 出口參數:無
****************************************************************************/
void TimeSendLCD(void)
{
uint32 times, hour, min, sec;
char szTime[10];
while( 0==(ILR&0x01) ); // 等待RTC增量中斷標志
ILR = 0x01; // 清除中斷標志
times = CTIME0;
hour = 0x1F & (times>>16);
min = 0x3F & (times>>8);
sec = 0x3F & (times);
szTime[0] = '0' + (hour/10); // '0' + 1 = '1'
szTime[1] = '0' + (hour%10);
szTime[2] = ':';
szTime[3] = '0' + (min/10);
szTime[4] = '0' + (min%10);
szTime[5] = ':';
szTime[6] = '0' + (sec/10);
szTime[7] = '0' + (sec%10);
szTime[8] = 0; // end flag of string
SendTimeRtc(); // 讀取時鐘值,并向UART0發送
aDRT_clear(0, 0, M_LCD_WSIZE, M_LCD_HSIZE, 0xf800 );
aDRT_write_string(szTime,2, 20, 40);
}
/****************************************************************************
* 名 稱:Time0Init()
* 功 能:初始化定時器0,定時時間為1S。
* 入口參數:無
* 出口參數:無
****************************************************************************/
void Time0Init(void)
{ /* Fcclk = Fosc*4 = 11.0592MHz*4 = 44.2368MHz
Fpclk = Fcclk/4 = 44.2368MHz/4 = 11.0592MHz
*/
T0PR = 99; // 設置定時器0分頻為100分頻,得110592Hz
T0MCR = 0x03; // 匹配通道0匹配中斷并復位T0TC
T0MR0 = 552960; // 比較值(1S定時值)
T0TCR = 0x03; // 啟動并復位T0TC
T0TCR = 0x01;
}
/****************************************************************************
* 名 稱:UART0_SendByte()
* 功 能:向串口發送字節數據,并等待發送完畢。
* 入口參數:data 要發送的數據
* 出口參數:無
****************************************************************************/
void UART0_SendByte(uint8 data)
{
U0THR = data; // 發送數據
while( (U0LSR&0x40)==0 ); // 等待數據發送完畢
}
/****************************************************************************
* 名 稱:UART0_SendStr()
* 功 能:向串口發送一字符串
* 入口參數:srt 要發送的字符串的指針
* 出口參數:無
****************************************************************************/
void UART0_SendStr(uint8 const *str)
{
while(1)
{
if( *str == '\0' ) break;
UART0_SendByte(*str++); // 發送數據
}
}
/****************************************************************************
* 名 稱:Time_INIT()
* 功 能:定時器。
* 入口參數:無
* 出口參數:無
****************************************************************************/
void Time_INIT(void)
{
while( (T0IR&0x01) == 0 ); // 等待定時時間到
T0IR = 0x01;
}
/*********************************************************************************************************
** 函數名稱: TaskStart
** 功能描述: μCOS-II的第一個任務,通常由它初始化目標板和建立其它任務
********************************************************************************************************/
void TaskCard(void *pdata)
{
uint8 *pRec;
uint8 err;
uint32 bufaddr,blockaddr,blocknum;
pdata = pdata; /* 避免編譯警告 */
Uart0ReviceMbox = OSMboxCreate(NULL); /* 建立郵箱 */
if (Uart0ReviceMbox == NULL)
while (1);
TargetInit(); /* 目標板初始化 */
for (;;)
{
pRec = (uint8 *)OSMboxPend(Uart0ReviceMbox, 0, &err); /* 接收數據 */
switch(pRec[0])
{
case CMD_SD_INIT: pRec[1] = SD_Initialize(); /* 初始化SD卡 */
break;
case CMD_SD_READ:
blockaddr = (pRec[1] << 24) + (pRec[2] << 16) + /* 計算塊地址 */
(pRec[3] << 8) + pRec[4];
pRec[1] = SD_ReadBlock(blockaddr, sd_buf); /* SD卡單塊讀 */
break;
case CMD_SD_WRITE:
blockaddr = (pRec[1] << 24) + (pRec[2] << 16) +
(pRec[3] << 8) + pRec[4];
pRec[1] = SD_WriteBlock(blockaddr, sd_buf); /* SD 卡單塊寫 */
break;
case CMD_SD_ERASE:
blockaddr = (pRec[1] << 24) + (pRec[2] << 16) +
(pRec[3] << 8) + pRec[4]; /* 擦卡起始地址 */
blocknum = (pRec[5] << 16) + (pRec[6] << 8) +
(pRec[7]); /* 塊數 */
pRec[1] = SD_EraseBlock(blockaddr, blocknum); /* 擦除操作 */
break;
case CMD_DATA_RECV:
bufaddr = (pRec[1] << 8) + pRec[2]; /* 計算緩沖區地址 */
memcpy(sd_buf + bufaddr, &pRec[3], 5); /* 收到數據放入pRec */
break;
case CMD_DATA_TRANS:
bufaddr = (pRec[1] << 8) + pRec[2]; /* 計算緩沖區地址 */
memcpy(&pRec[1], sd_buf + bufaddr, 7); /* sd_buf數據放入pRec */
break;
default: break;
}
UART0Write(pRec, 8); /* 發送響應幀 */
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -