?? main.c
字號:
/****************************************************************************
* 文 件 名:main.c
* 功 能:使用硬件I2C對ZLG7290進行操作,利用中斷方式操作。
* 說 明:將跳線器JP6短接。
* 主程序不做防抖處理
****************************************************************************/
#include "config.h"
#define ZLG7290 0x70 // 定義器件地址
/****************************************************************************
* 名 稱:UART0_Init()
* 功 能:初始化串口0。設置為8位數據位,1位停止位,無奇偶校驗
* 入口參數:無
* 出口參數:無
****************************************************************************/
void UART0_Init(uint32 bps)
{
uint16 Fdiv;
PINSEL0 = (PINSEL0 & (~0x0F)) | 0x05; // 不影響其它管腳連接,設置I/O連接到UART0
U0LCR = 0x83; // DLAB = 1,可設置波特率
Fdiv = (Fpclk / 16) / bps; // 設置波特率
U0DLM = Fdiv / 256;
U0DLL = Fdiv % 256;
U0LCR = 0x03;
}
/****************************************************************************
* 名 稱:UART0_SendByte()
* 功 能:向串口發送字節數據,并等待發送完畢。
* 入口參數:data 要發送的數據
* 出口參數:無
****************************************************************************/
void UART0_SendByte(uint8 data)
{
U0THR = data; // 發送數據
while( (U0LSR&0x40)==0 ); // 等待數據發送完畢
}
/****************************************************************************
* 名 稱:UART0_SendStr()
* 功 能:向串口發送一字符串
* 入口參數:srt 要發送的字符串的指針
* 出口參數:無
****************************************************************************/
void UART0_SendStr(char *str)
{
while(1)
{
if( *str == '\0' ) break;
UART0_SendByte(*str++); // 發送數據
}
}
/****************************************************************************
* 名 稱:I2C_Init()
* 功 能:主模式I2C初始化,包括初始化其中斷為向量IRQ中斷。
* 入口參數:fi2c 初始化I2C總線速率,最大值為400K
* 出口參數:無
****************************************************************************/
void I2C_Init(uint32 fi2c)
{
if(fi2c>400000) fi2c = 400000;
PINSEL0 = (PINSEL0 & (~0xF0)) | 0x50; // 不影響其它管腳連接,設置I/O連接到I2C
I2SCLH = (Fpclk/fi2c + 1) / 2; // 設置I2C時鐘為fi2c
I2SCLL = (Fpclk/fi2c) / 2;
I2CONCLR = 0x2C;
I2CONSET = 0x40; // 使能主I2C
/* 設置I2C中斷允許 */
VICIntSelect = 0x00000000; // 設置所有通道為IRQ中斷
VICVectCntl0 = 0x29; // I2C通道分配到IRQ slot 0,即優先級最高
VICVectAddr0 = (int)IRQ_I2C; // 設置I2C中斷向量地址
VICIntEnable = 0x0200; // 使能I2C中斷
}
/****************************************************************************
* 名 稱:DelayNS()
* 功 能:長軟件延時
* 入口參數:dly 延時參數,值越大,延時越久
* 出口參數:無
****************************************************************************/
void DelayNS(uint32 dly)
{
uint32 i;
for(; dly>0; dly--)
{
for(i=0; i<5000; i++);
}
}
/****************************************************************************
* 名 稱:main()
* 功 能:對ZLG7290進行操作
* 說 明:在STARTUP.S文件中使能IRQ中斷(清零CPSR中的I位);
* 在CONFIG.H文件中包含I2CINT.H、ZLG7290.H。
****************************************************************************/
int main(void)
{
uint8 key_buf[8];
char disp_buf[32];
uint8 key;
I2C_Init(30000); // I2C 配置初始化
UART0_Init(115200); // UART0 配置初始化
sprintf(disp_buf,"\r\nKey testing!\r\n");
UART0_SendStr(disp_buf);
/* 讀取按鍵,將結果通過UART0發給PC */
while(1)
{
DelayNS(5);
key = 0;
IRcvStr(ZLG7290, 0x01, key_buf, 8);
if(0 == key_buf[1]) // 是否有效的按鍵動作
{
key = key_buf[0]; // 取得鍵值
}
sprintf(disp_buf,"This is key %d!\r\n", key);
UART0_SendStr(disp_buf);
}
return(0);
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -