⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 test_gpio.c

📁 采用32位嵌入式芯片SPCE3200(凌阳)设计的开发板,具有多媒体功能。其中包含了网络、SD卡、TV、UART等是全部十个C程序。
💻 C
字号:
//====================================================================================
//文 件 名:Test_GPIO.c
//功能描述: GPIO测试
//维护记录: 		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("请将\"Senser (J8)\"排针的上下两行相互连接,点击屏幕的任意位置继续。");
	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测试...");

	/////////////////////////////////////////////////////////////////////////////////////////////
	//	I/O分布:
	//   + - 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. 上排输出10101...,下排输入
	*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. 上排输出01010..., 下排输入
	*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. 上排输入,下排输出10101...
	*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. 上排输入,下排输出01010...
	*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("成功!");
	}
	else
	{
		TFT_SetColor(COLOR_RED);
		TFT_Print("失败!");
		TFT_SetColor(COLOR_BLUE);
		TFT_Print("请检查");
		switch(ErrCode)
		{
			case 1:
				TFT_Print("CSI部分。");
				break;
			case 2:
				TFT_Print("I2C部分。");
				break;
			case 3:
				TFT_Print("ADC和IOA/B。");
				break;
			case 4:
				TFT_Print("ADC和IOB。");
				break;
		}
	}
	TFT_SetTextPos(0, 70);
	TFT_SetColor(COLOR_BLUE);
	TFT_Print("点击屏幕的任意位置返回");
	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 + -