adau 1452 dsp safeload 操作机制

最近在弄一个ADAU 1452   DSP音频项目,需要使用safeload模式进行数据更新,避免DSP带来的噪音问题。在网上找了一些safeload相关的,发现验证都不对。最后在官方的手册找到我想要的答案,并在项目中验证通过。记录分享一下:

首先关于safeload 地址问题,可以从手册中看到,sigmastudio v3.14以后的版本,地址固定在0x6000.

图中为sigmastudio导出的文件中有一个******PARAM.h的文件中可以看到,确实地址为24576,对应的0x6000.

接下来我们看safeload 操作步骤:

/*
*        ADAU1452 Sigmastudio Safeload write through SPI
*        step 1. write target address to safeload address register, address start with 0x6000.
*        step 2. write target data to safeload data register, address start with 0x6005.
*        step 3. set bit IST in DSP CORE control register, address 0x6006, to inital safeload transmitter.
*/

代码如下:

void SIGMA_SAFELOAD_WRITE_REGISTER(int devAddress,int Targetaddress, int length, ADI_REG_TYPE *pData)
{
	
	#if 1
		uint8_t subTargetaddress0, SafeLoad_subaddress0;
		uint8_t subTargetaddress1, SafeLoad_subaddress1;
		uint8_t cmd[3];
		uint8_t data[4];
	
	
	
	 //safepara
		SafeLoad_subaddress0 = (__SafeLoad_Module__Address & 0xFF00)>>8;
		SafeLoad_subaddress1 =  __SafeLoad_Module__Address & 0x00FF;
	
	
		/* Configure the command */
		cmd[0] = devAddress;
		cmd[1] = SafeLoad_subaddress0;
		cmd[2] = SafeLoad_subaddress1;

		// write target data to Address "__SafeLoad_Module__"
		GPIO_ResetBits(USBI_SPI1_CS_GPIO_Port,USBI_SPI1_CS_Pin);

		 /* Send the command */
		SPI_WriteBlock(cmd,3);
		/* Transmission of the data */
		SPI_WriteBlock(pData,length);

		//GPIO_SetBits(USBI_SPI1_CS_GPIO_Port,USBI_SPI1_CS_Pin);
		
		delay_ms(1);

		//Target address 
		//GPIO_ResetBits(USBI_SPI1_CS_GPIO_Port,USBI_SPI1_CS_Pin);

		subTargetaddress0 = (Targetaddress & 0xFF00)>>8;
		subTargetaddress1 =  Targetaddress & 0x00FF;

		/* Configure the command */
		cmd[0] = devAddress;
		cmd[1] = SafeLoad_subaddress0;
		cmd[2] = SafeLoad_subaddress1+5;
		 /* Send the command */
		SPI_WriteBlock(cmd,3);
		

		//Target address 4bytes
		data[0]= 0;
		data[1]= 0;
		data[2]= subTargetaddress0;
		data[3]= subTargetaddress1;
		/* Send the command */
		SPI_WriteBlock(data,4);
		
		
		delay_ms(1);
		//num_SafeLoad  for safeload transfer
		//GPIO_ResetBits(USBI_SPI1_CS_GPIO_Port,USBI_SPI1_CS_Pin);


		/* Configure the command */
		cmd[0] = devAddress;
		cmd[1] = SafeLoad_subaddress0;
		cmd[2] = SafeLoad_subaddress1+6;
		 /* Send the command */
		SPI_WriteBlock(cmd,3);
		
		
		//num_SafeLoad 4bytes
		data[0]= 0;
		data[1]= 0;
		data[2]= 0;
		data[3]= 1;
		/* Send the command */
		SPI_WriteBlock(data,4);
		
		GPIO_SetBits(USBI_SPI1_CS_GPIO_Port,USBI_SPI1_CS_Pin);
		
		delay_ms(1);
		
		#else
		
		uint8_t cmd[3];
	  /* Calculation of the size between the write address and the end of the page */
	  /* Perform the write page by page */
		/* Configure the command */
	  cmd[0] = devAddress;
		cmd[1] = (uint8_t)(Targetaddress >> 8);
		cmd[2] = (uint8_t)(Targetaddress);
		/* Enable write operations */
		GPIO_ResetBits(USBI_SPI1_CS_GPIO_Port,USBI_SPI1_CS_Pin);
	  /* Send the command */
		SPI_WriteBlock(cmd,3);
	  /* Transmission of the data */
		SPI_WriteBlock(pData,length);
		GPIO_SetBits(USBI_SPI1_CS_GPIO_Port,USBI_SPI1_CS_Pin);
		
		#endif
}
void setMusicEqOn(void)
{
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x0043, 4, MODE_2_0);			/* EQS300MultiS3B2_1 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x0044, 4, MODE_2_1);			/* EQS300MultiS3B1_1 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x0045, 4, MODE_2_2);			/* EQS300MultiS3B0_1 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x0046, 4, MODE_2_3);			/* EQS300MultiS3A2_1 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x0047, 4, MODE_2_4);			/* EQS300MultiS3A1_1 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x6019, 4, MODE_2_5);			/* EQS300MultiS3B2_2 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x601A, 4, MODE_2_6);			/* EQS300MultiS3B1_2 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x601B, 4, MODE_2_7);			/* EQS300MultiS3B0_2 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x601C, 4, MODE_2_8);			/* EQS300MultiS3A2_2 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x601D, 4, MODE_2_9);			/* EQS300MultiS3A1_2 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x0048, 4, MODE_2_10);			/* EQS300MultiS3B2_3 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x0049, 4, MODE_2_11);			/* EQS300MultiS3B1_3 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x004A, 4, MODE_2_12);			/* EQS300MultiS3B0_3 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x004B, 4, MODE_2_13);			/* EQS300MultiS3A2_3 */
SIGMA_SAFELOAD_WRITE_REGISTER( DEVICE_ADDR_IC_1 , 0x004C, 4, MODE_2_14);			/* EQS300MultiS3A1_3 */
}

图中SPI操作部代码我这里就没有提供了,网上到处能找到。

  • 11
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值