📄 change.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 + -