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

📄 change.c

📁 7171的配置例程
💻 C
字号:
#define	PAL		1
/*****************************************************
                头文件
*****************************************************/
#include <stdio.h>
#include <services/services.h>//系统服务程序		
#include <drivers/adi_dev.h>//设备管理
#include <drivers/ppi/adi_ppi.h>//PPI设备驱动
#include <drivers/twi/adi_twi.h>//TWI设备驱动
#include <drivers/deviceaccess/adi_device_access.h>//TWI、SPI设备访问
#include <drivers/encoder/adi_adv717x.h>//ADV7171驱动

/*****************************************************
                存储区
*****************************************************/
static u8 DevMgrData[ADI_DEV_BASE_MEMORY + (ADI_DEV_DEVICE_MEMORY*5)];//设备管理存储
static ADI_DEV_MANAGER_HANDLE DeviceManagerHandle;//设备管理器句柄
static u8 DMAMgrData[ADI_DMA_BASE_MEMORY + (ADI_DMA_CHANNEL_MEMORY * 2)];//DMA管理存储
static ADI_DMA_MANAGER_HANDLE DMAManagerHandle;				// DMA句柄

/*****************************************************
                设备句柄
*****************************************************/
static ADI_DEV_DEVICE_HANDLE  ADV7171Handle;//ADV7171句柄
//static ADI_DEV_DEVICE_HANDLE  TWIHandle;

/*****************************************************
                函数原型
*****************************************************/
static void InitSystemServices(void);
static void ClientCallback(void *AppHandle,u32  Event,void *pArg);
//static void SetEncoderMode(ADI_DEV_DEVICE_HANDLE ADV7171Handle);
//static void ReadEncoderRegs(ADI_DEV_DEVICE_HANDLE ADV7171Handle);

void main(void)
{
    u32	Result;//返回代码       
    u32 i;
    u32 SCFRval=0x2A098ACA;
    InitSystemServices();
    
    adi_twi_bit_rate rate = { 100, 50 };

	adi_twi_pseudo_port pseudo = { ADI_FLAG_PF0, ADI_FLAG_PF1, ADI_TMR_GP_TIMER_0,(ADI_INT_PERIPHERAL_ID) NULL };

	ADI_DEV_CMD_VALUE_PAIR TWIConfig [ ] = {
	{ ADI_TWI_CMD_SET_PSEUDO, (void *)(&pseudo) },
	{ ADI_DEV_CMD_SET_DATAFLOW_METHOD, (void *)ADI_DEV_MODE_SEQ_CHAINED },
	{ ADI_TWI_CMD_SET_FIFO, (void *)0x0000 },
	{ ADI_TWI_CMD_SET_RATE, (void *)(&rate) },
	{ ADI_TWI_CMD_SET_LOSTARB, (void *)1 },
	{ ADI_TWI_CMD_SET_ANAK, (void *)0 },
	{ ADI_TWI_CMD_SET_DNAK, (void *)0 },
	{ ADI_DEV_CMD_SET_DATAFLOW, (void *)TRUE },
	{ ADI_DEV_CMD_END, NULL }
	};
    
    //ADI_DEV_ACCESS_REGISTER WRITE_Reg;
	// Load the register address to be read
	//WRITE_Reg.Address = ADV717x_MR3;
	//clear the Data location
	//WRITE_Reg.Data = 4;
	
	
	Result=adi_dev_Open(DeviceManagerHandle,&ADIADV7171EntryPoint,0,NULL,&ADV7171Handle,ADI_DEV_DIRECTION_OUTBOUND,DMAManagerHandle,NULL,ClientCallback);
	// Application calls adi_dev_Control( ) function with corresponding command and value
	// Register value will be read back to location - Read_Reg.Data
	Result=adi_dev_Control(ADV7171Handle, ADI_ADV717x_CMD_SET_PPI_DEVICE_NUMBER, (void*)0);
	Result=adi_dev_Control(ADV7171Handle, ADI_ADV717x_CMD_SET_PPI_STATUS, (void*)ADI_ADV717x_PPI_OPEN);
	Result=adi_dev_Control(ADV7171Handle,ADI_ADV717x_CMD_SET_TWI_CONFIG_TABLE,(void *)TWIConfig);
                              
                             
	Result=adi_dev_Control(ADV7171Handle, ADI_ADV717x_CMD_SET_SCF_REG, (void *) SCFRval );
	//Result=adi_dev_Control(ADV7171Handle, ADI_DEV_CMD_REGISTER_WRITE, (void *) & WRITE_Reg);
    
	//SetEncoderMode(ADV7171Handle);
	//ReadEncoderRegs(ADV7171Handle);
}


//初始化
static void InitSystemServices(void)
{
    u32 i;
    u32 Result;
    
    Result=adi_int_Init(NULL,0,&i,NULL);
    
    Result=adi_dma_Init(DMAMgrData,sizeof(DMAMgrData),&i,&DMAManagerHandle,NULL);
    
    Result=adi_dev_Init(DevMgrData, sizeof(DevMgrData), &i, &DeviceManagerHandle, NULL);
}

//回调函数
static void ClientCallback(void *AppHandle,u32  Event,void *pArg)	
{

	switch (Event)
	{
		// CASE (DMA buffer processed)
        	case ADI_DEV_EVENT_BUFFER_PROCESSED:
        	      	
            break;

	}

}
//设置视频模式
static void SetEncoderMode(ADI_DEV_DEVICE_HANDLE ADV7171Handle)	
{	
    u32 Result;
    ADI_DEV_ACCESS_REGISTER PALCfg[]=
    						{{ADV717x_MR0,	0x05},		// 寄存器地址, 数据
    					   {ADV717x_MR1,	0x10},
    					   {ADV717x_MR2,	0x00},
    					   {ADV717x_MR3,	0x00},
    					   {ADV717x_MR4,	0x00},
    					   {ADV717x_TMR0, 	0x08}, 
    					   {ADV717x_TMR1, 	0x00},
    					   {ADI_DEV_REGEND,0	}};	// 结束

	    Result=adi_dev_Control(ADV7171Handle, ADI_ADV717x_CMD_SET_SCF_REG, (void *) ADV717x_SCF_VALUE_PAL_BI);
    
   		// configure encoder(ADV7171 or ADV7179) in selected mode
    	Result=adi_dev_Control(ADV7171Handle, ADI_DEV_CMD_REGISTER_TABLE_WRITE, (void *)PALCfg);

}
//读取ADV7171
static void ReadEncoderRegs(ADI_DEV_DEVICE_HANDLE ADV7171Handle)	
{							
	u32 i,EncoderSCFValue,Result;
	
   // ADV7171 register configuration array for NTSC mode
    ADI_DEV_ACCESS_REGISTER read[]={{ADV717x_MR0, 	0},		// register address, configuration data
    										{ADV717x_MR1, 	0},
    										{ADV717x_MR2, 	0},
    										{ADV717x_MR3, 	0},
    										{ADV717x_MR4, 	0},
    										{ADV717x_TMR0, 	0}, 
    										{ADV717x_TMR1, 	0},
    										{ADI_DEV_REGEND,0	}	};	// End of register access

 	Result = adi_dev_Control(ADV7171Handle, ADI_ADV717x_CMD_GET_SCF_REG, (void *)&EncoderSCFValue);
	if ( Result != ADI_DEV_RESULT_SUCCESS) printf("Get SCF-Reg failed\n");
	else 
	printf("\nEncoder SCF=0x%x\n",EncoderSCFValue);
	
	
	    // Read ADV7171 in selected mode
    Result = adi_dev_Control(ADV7171Handle, ADI_DEV_CMD_REGISTER_TABLE_READ, (void *)read);       
	if ( Result != ADI_DEV_RESULT_SUCCESS) printf("Selective Read failed\n");
	else {
		printf("Encoder Regs: ");
	
		for(i=0;i<7;i++){
		printf("0x%x ",read[i].Data);
		}
		printf("\n");
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -