📄 test_gpio.c
字号:
//====================================================================================
//File Name: Test_GPIO.c
//Description: GPIO test
//Update: V1.0 by wangtao <wangtao@sunnorth.com.cn>
//====================================================================================
#include "SystemHeader.h"
short Test_GPIO(void)
{
short x, y;
short Ret = 1, ErrCode = 0;
int i;
STR_IMAGE Pic_GPIO = {160, 32, RES_GPIO_BIN};
TFT_SetBGColor(0x0001);
TFT_SetWindow(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
TFT_SetBGColor(COLOR_WHITE);
TFT_SetWindow(40, 40, 279, 199);
TFT_SetColor(COLOR_RED);
TFT_Rectangle(0, 0, 239, 159, PAINT_HOLLOW);
TFT_SetColor(COLOR_BLUE);
TFT_SetWindow(60, 60, 259, 119);
TFT_SetTextPos(0, 0);
TFT_Print("Please connect the two rows of \"Sensor (J8)\" pin header and click any position on the screen to continue.");
TFT_SetWindow(80, 130, 240, 190);
TFT_PutImage(0, 0, &Pic_GPIO);
while(1)
{
Touch_Get(&x, &y);
if(x!=-1) break;
}
for(i=0; i<1000000; i++);
TFT_SetBGColor(COLOR_WHITE);
TFT_SetWindow(40, 40, 279, 199);
TFT_SetColor(COLOR_RED);
TFT_Rectangle(0, 0, 239, 159, PAINT_HOLLOW);
TFT_SetColor(COLOR_BLUE);
TFT_SetWindow(70, 100, 259, 189);
TFT_SetTextPos(0, 0);
TFT_Print("GPIO test...");
/////////////////////////////////////////////////////////////////////////////////////////////
// I/O assignments:
// + - CSI_VS I2C_CLK CSI_CKO CSI_FLD CSI_D1/D3/D5/D7 X A0 A1 B0 B1 B2 B3 B4 B5 -
// + - CSI_HS I2C_DAT CSI_CKI RESETN CSI_D0/D2/D4/D6 X CH0 CH1 CH2 CH3 CH4 CH5 CH6 CH7 -
*P_GPIO_CLK_CONF = C_GPIO_CLK_EN | C_GPIO_RST_DIS;
*P_CSI_INTERFACE_SEL &= ~0x00000300;
*P_I2C_INTERFACE_SEL &= ~0x00000001;
*P_ADC_AINPUT_CTRL = 0x000000;
// 1. Output 10101... via upper row, and input via lower row
*P_CSI_GPIO_SETUP = 0x09AA0888;
*P_CSI_GPIO_PULL = 0x1FFF1FFF;
*P_I2C_GPIO_SETUP = 0x01010100;
*P_IOA_GPIO_SETUP = 0x03030301;
*P_IOB_GPIO_SETUP = 0x1F1F1F15;
*P_ADC_GPIO_SETUP = 0xFFFF0000;
if(*P_CSI_GPIO_INPUT!=0x00001CCC)
{
Ret = 0;
ErrCode = 1;
}
if(*P_ADC_GPIO_INPUT!=0x00000055)
{
Ret = 0;
ErrCode = 2;
}
if((*P_I2C_GPIO_INPUT & 0x03000000)!=0x00000000)
{
Ret = 0;
ErrCode = 3;
}
// 2. Output 01010... via upper row, and input via lower row
*P_CSI_GPIO_SETUP = 0x09AA0122;
*P_CSI_GPIO_PULL = 0x1FFF1FFF;
*P_I2C_GPIO_SETUP = 0x01010101;
*P_IOA_GPIO_SETUP = 0x03030302;
*P_IOB_GPIO_SETUP = 0x1F1F1F2A;
*P_ADC_GPIO_SETUP = 0xFFFF0000;
if(*P_CSI_GPIO_INPUT!=0x00001333)
{
Ret = 0;
ErrCode = 1;
}
if((*P_I2C_GPIO_INPUT & 0x03000000)!=0x03000000)
{
Ret = 0;
ErrCode = 2;
}
if(*P_ADC_GPIO_INPUT!=0x000000AA)
{
Ret = 0;
ErrCode = 3;
}
// 3. Input via upper row, and output 10101... via lower row
*P_CSI_GPIO_SETUP = 0x06550444;
*P_CSI_GPIO_PULL = 0x1FFF1FFF;
*P_I2C_GPIO_SETUP = 0x02020200;
*P_IOA_GPIO_SETUP = 0x03030000;
*P_IOB_GPIO_SETUP = 0x1F1F0000;
*P_ADC_GPIO_SETUP = 0xFFFFFF55;
if(*P_CSI_GPIO_INPUT!=0x00001CCC)
{
Ret = 0;
ErrCode = 1;
}
if((*P_I2C_GPIO_INPUT & 0x03000000)!=0x00000000)
{
Ret = 0;
ErrCode = 2;
}
if((*P_IOA_GPIO_INPUT & 0x00000003)!=0x00000001)
{
Ret = 0;
ErrCode = 3;
}
if((*P_IOB_GPIO_INPUT & 0x00003F00)!=0x00001500)
{
Ret = 0;
ErrCode = 4;
}
// 4. Input via upper row, and output 01010... via lower row
*P_CSI_GPIO_SETUP = 0x06550211;
*P_CSI_GPIO_PULL = 0x1FFF1FFF;
*P_I2C_GPIO_SETUP = 0x02020202;
*P_IOA_GPIO_SETUP = 0x03030000;
*P_IOB_GPIO_SETUP = 0x1F1F0000;
*P_ADC_GPIO_SETUP = 0xFFFFFFAA;
if(*P_CSI_GPIO_INPUT!=0x00001333)
{
Ret = 0;
ErrCode = 1;
}
if((*P_I2C_GPIO_INPUT & 0x03000000)!=0x03000000)
{
Ret = 0;
ErrCode = 2;
}
if((*P_IOA_GPIO_INPUT & 0x00000003)!=0x00000002)
{
Ret = 0;
ErrCode = 3;
}
if((*P_IOB_GPIO_INPUT & 0x00003F00)!=0x00002A00)
{
Ret = 0;
ErrCode = 4;
}
if(Ret==1)
{
TFT_Print("Successful!");
}
else
{
TFT_SetColor(COLOR_RED);
TFT_Print("Failed!");
TFT_SetColor(COLOR_BLUE);
TFT_Print("Please check");
switch(ErrCode)
{
case 1:
TFT_Print("CSI");
break;
case 2:
TFT_Print("I2C");
break;
case 3:
TFT_Print("ADC and IOA/B");
break;
case 4:
TFT_Print("ADC and IOB");
break;
}
}
TFT_SetTextPos(0, 70);
TFT_SetColor(COLOR_BLUE);
TFT_Print("Click any position in the screen to return");
Touch_Init();
while(1)
{
Touch_Get(&x, &y);
if(x!=-1) break;
}
for(i=0; i<1000000; i++);
TFT_SetBGColor(0x0001);
TFT_SetWindow(0, 0, TFT_WIDTH-1, TFT_HEIGHT-1);
return Ret;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -