i2c call back is not getting called

取消
显示结果 
显示  仅  | 搜索替代 
您的意思是: 

i2c call back is not getting called

847 次查看
sushmasan
Contributor II

Hello Team,

I am working with a DAC module (MCP47FEB21A0) that is interfaced with an LPC55S69 over I²C.

I observed that I2C_MasterTransferBlocking() works correctly, but when I use I2C_MasterTransferNonBlocking(), the I²C callback is never invoked.

I2C_MasterTransferNonBlocking() is returning kStatus_Success.

For reference, I2C_MasterTransferCreateHandle() is called once during I²C initialization.

Could someone please explain why the I²C callback is not getting called when using I2C_MasterTransferNonBlocking()?

Regards,
Santhosh

 

0 项奖励
回复
8 回复数

656 次查看
sushmasan
Contributor II

Hi @Harry_Zhang ,

I even tried it,

uint8_t txData[3] = {0};

txData[0] = (uint8_t) (reg_addr << 3);

txData[1] = (uint8_t)(data >> 8); /* Data high byte */

txData[2] = (uint8_t)(data & 0xFFU); /* Data low byte */

 

masterXfer.data = txData;

masterXfer.dataSize = 3; /* 3 bytes total */

 

I have some data which is of 2 bytes, so after the adding reg addr it becomes 3 bytes.

Still I²C callback is not getting called when I use I2C_MasterTransferNonBlocking().

 

Regards,

San

 

0 项奖励
回复

809 次查看
Harry_Zhang
NXP Employee
NXP Employee

Hi @sushmasan 

I think you can refer to the  lpcxpresso55s69_lpc_i2c_interrupt_b2b_transfer_master_cm33_core0 SDK demo.

Harry_Zhang_0-1767855362914.png

BR

Harry

0 项奖励
回复

788 次查看
sushmasan
Contributor II

Hi @Harry_Zhang ,

Thanks for your response.

I have other sensor modules that are working with non-blocking calls.

I am using a BMP390 sensor, and the I²C communication works fine with non-blocking calls. For example, if one of the register addresses is 0x01, I assign the subaddress as shown below:

masterXfer.subaddress = (uint32_t)0x01;


However, for the DAC (MCP47FEB21A0) module, the subaddress is assigned differently:

uint8_t subAddress;
subAddress = (uint8_t)(reg_addr << 3); // Based on the MCP47FEB21A0 datasheet, the register address must be shifted left by 3
masterXfer.subaddress = (uint32_t)subAddress;

Is it going to make any difference?

Regards,
San

0 项奖励
回复

695 次查看
Harry_Zhang
NXP Employee
NXP Employee

Hi @sushmasan 

I think you can try to set subaddressSize = 0 and put the DAC’s command byte(s) and data bytes directly in masterXfer.data, then start a write transfer.

BR

Harry

0 项奖励
回复

617 次查看
sushmasan
Contributor II

Yesterday I replied to your message, but mistakenly I did a reply to the topic. I am not sure whether you have noticed it or not, that's why responding to your message again here.

 

Hi @Harry_Zhang ,

I even tried it,

uint8_t txData[3] = {0};

txData[0] = (uint8_t) (reg_addr << 3);

txData[1] = (uint8_t)(data >> 8); /* Data high byte */

txData[2] = (uint8_t)(data & 0xFFU); /* Data low byte */

 

masterXfer.data = txData;

masterXfer.dataSize = 3; /* 3 bytes total */

 

I have some data which is of 2 bytes, so after the adding reg addr it becomes 3 bytes.

Still I²C callback is not getting called when I use I2C_MasterTransferNonBlocking().

 

Regards,

San

0 项奖励
回复

344 次查看
Harry_Zhang
NXP Employee
NXP Employee

Hi  @sushmasan 

Can you share the your code so I can take a look?

BR

Harry

0 项奖励
回复

305 次查看
sushmasan
Contributor II

Hi @Harry_Zhang ,

Please find the code snippet for your reference,

#define I2C5_BASE                                (0x40096000u)
#define I2C5_MASTER_BASE    (I2C5_BASE)
#define I2C5_MASTER_CLOCK_FREQUENCY (12000000)
#define I2C5_MASTER ((I2C_Type *) I2C5_MASTER_BASE)

static void i2c_master_callback(I2C_Type *base, i2c_master_handle_t *handle, status_t status, void *userData)
{		
	/* Signal transfer success when received success status. */
	if (status == kStatus_Success)
	{
		// Successfully completed data transfer
		g_MasterCompletionFlag = true;
		g_i2cCallBackStatus = kStatus_Success;
	}
	/* Signal transfer failure when received failure status. */
	else
	{
		if(status == kStatus_I2C_Nak)
		{			
			g_i2cCallBackStatus = kStatus_I2C_Nak;
		}
		else if (status == kStatus_I2C_Addr_Nak)
		{		
			g_i2cCallBackStatus = kStatus_I2C_Addr_Nak;
		}
		else if (status == kStatus_I2C_ArbitrationLost)
		{		
			g_i2cCallBackStatus = kStatus_I2C_ArbitrationLost;
		}
		else
		{		
			g_i2cCallBackStatus = false;
		}
	}

	return;
}

bool i2c_readwrite(i2c_master_transfer_t *masterXfer)
{
	status_t status = kStatus_Fail;
	status_t finalStatus = kStatus_Fail;
	bool retVal = false;
	
	g_MasterCompletionFlag = false;
	g_i2cCallBackStatus = kStatus_Fail;

	/* Send master non-blocking data to slave (Performing the write operation) */
	/* Allowing the CPU to continue executing other tasks in parallel while the I2C transfer is being handled in the background. */
	status = I2C_MasterTransferNonBlocking(I2C5_MASTER, &g_m_handle, masterXfer);

	PRINTF("(%s() => Wait for the data transfer to slave completion. status:%d \r\n",__func__,status);

	/*  Wait for transfer completed. */
	while (!g_MasterCompletionFlag)
	{
	}
	g_MasterCompletionFlag = false;

	// Driver-level error (could not start transfer)
	if(status == kStatus_Success)
		retVal = true;
	// Transfer completed
	else
		retVal = false;
	
	g_i2cCallBackStatus = kStatus_Fail;

	return retVal;
}

// THIS IS WITH I2C NON BLOCKING CALL -> CALL BACK IS NOT GETTING INVOKED.
bool dac_write_reg(uint8_t reg_addr, uint16_t data)
{
	/* The DAC needs 1 address byte + 2 data bytes. */
	static i2c_master_transfer_t masterXfer = {0};
	static uint8_t txData[3] = {0};	
	bool retVal = false;
	bool write_status = false;

	memset(&masterXfer, 0, sizeof(masterXfer));
	
	txData[0] = (uint8_t) (reg_addr << 3); 
	txData[1] = (uint8_t)(data >> 8);     
	txData[2] = (uint8_t)(data & 0xFFU);  

	masterXfer.slaveAddress   = 0x60;     
	masterXfer.direction      = kI2C_Write;
	masterXfer.subaddress     = 0;
	masterXfer.subaddressSize = 0;                      
	masterXfer.data           = txData;
	masterXfer.dataSize       = 3;          
	masterXfer.flags          = kI2C_TransferDefaultFlag; 

	write_status = i2c_readwrite(&masterXfer);
	if(true == write_status)
	{
		PRINTF("(%s) -> I2C write PASS @line:%d \r\n",__func__,__LINE__);

		retVal = true;
	}
	else
	{
		PRINTF("(%s) -> I2C write failed with status %d \r\n",__func__,write_status);

		retVal = false;
	}
	
	return retVal;
}


// THIS IS WITH I2C BLOCKING CALL -> WORKING FINE
int8_t dac_write_reg(uint8_t reg_addr, uint16_t data)
{
	/* The DAC needs 1 address byte + 2 data bytes. */
	i2c_master_transfer_t masterXfer;
	uint8_t txData[2];
	uint8_t subAddress;
	
	memset(&masterXfer, 0, sizeof(masterXfer));

	subAddress = (uint8_t)(reg_addr << 3); /* DAC  reg  byte */
	txData[0] = (uint8_t)(data >> 8);     /* Data high byte */
	txData[1] = (uint8_t)(data & 0xFFU);  /* Data low  byte */

	masterXfer.slaveAddress   = 0x60;      
	masterXfer.direction      = kI2C_Write;
	masterXfer.subaddress     = (uint32_t) subAddress;
	masterXfer.subaddressSize = 1;                      
	masterXfer.data           = txData;
	masterXfer.dataSize       = 2;          
	masterXfer.flags          = kI2C_TransferDefaultFlag; 

	status_t status = I2C_MasterTransferBlocking(I2C5_MASTER, &masterXfer);
	if (status == kStatus_Success) {
		PRINTF("(%s) -> dac_write_reg PASS @line:%d \r\n",__func__,__LINE__);

		status = 1;
	}
	else
	{
		PRINTF("(%s) -> I2C_MasterTransferBlocking() failed with status %d \r\n",__func__,status);

		status = -1;
	}

	return status;
}


int main()
{
	I2C_MasterGetDefaultConfig(&masterConfig);
	
	I2C_MasterInit(I2C5_MASTER, &masterConfig, I2C5_MASTER_CLOCK_FREQUENCY);
	
	I2C_MasterTransferCreateHandle(I2C5_MASTER, &g_m_handle, i2c_master_callback, NULL);

	dac_write_reg(0x08, 0x0001);
}
0 项奖励
回复

127 次查看
Harry_Zhang
NXP Employee
NXP Employee

Hi @sushmasan 

i have reviewed your code. 

But I'm sorry, I couldn't find a clear error. I think you can also use an oscilloscope to check if the data transmission is correct and if the returned data is correct.

BR

Harry

0 项奖励
回复
%3CLINGO-SUB%20id%3D%22lingo-sub-2289725%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3Ei2c%20%E5%9B%9E%E8%B0%83%E6%9C%AA%E8%A2%AB%E8%B0%83%E7%94%A8%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2289725%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%EF%BC%8C%E5%9B%A2%E9%98%9F%E3%80%81%3C%2FP%3E%3CP%3E%E6%88%91%E6%AD%A3%E5%9C%A8%E4%BD%BF%E7%94%A8%E4%B8%80%E4%B8%AA%E9%80%9A%E8%BF%87%20I%C2%B2C%20%E4%B8%8E%20LPC55S69%20%E8%BF%9E%E6%8E%A5%E7%9A%84%20DAC%20%E6%A8%A1%E5%9D%97%EF%BC%88MCP47FEB21A0%EF%BC%89%E3%80%82%3C%2FP%3E%3CP%3E%E6%88%91%E5%8F%91%E7%8E%B0%20I2C_MasterTransferBlocking()%20%E5%8F%AF%E4%BB%A5%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C%EF%BC%8C%E4%BD%86%E5%BD%93%E6%88%91%E4%BD%BF%E7%94%A8%20I2C_MasterTransferNonBlocking()%20%E6%97%B6%EF%BC%8CI%C2%B2C%20%E5%9B%9E%E8%B0%83%E4%BB%8E%E6%9C%AA%E8%A2%AB%E8%B0%83%E7%94%A8%E3%80%82%3C%2FP%3E%3CP%3EI2C_MasterTransferNonBlocking()%20%E8%BF%94%E5%9B%9E%20kStatus_Success%E3%80%82%3C%2FP%3E%3CP%3E%E4%BD%9C%E4%B8%BA%E5%8F%82%E8%80%83%EF%BC%8C%E5%9C%A8%20I%C2%B2C%20%E5%88%9D%E5%A7%8B%E5%8C%96%E6%9C%9F%E9%97%B4%EF%BC%8C%E4%BC%9A%E8%B0%83%E7%94%A8%E4%B8%80%E6%AC%A1%20i2c_masterTransferCreateHandle%20()%E3%80%82%3C%2FP%3E%3CP%3E%E8%B0%81%E8%83%BD%E8%A7%A3%E9%87%8A%E4%B8%80%E4%B8%8B%EF%BC%8C%E4%B8%BA%E4%BB%80%E4%B9%88%E5%9C%A8%E4%BD%BF%E7%94%A8%20I2C_MasterTransferNonBlocking()%20%E6%97%B6%E6%B2%A1%E6%9C%89%E8%B0%83%E7%94%A8%20I%C2%B2C%20%E5%9B%9E%E8%B0%83%EF%BC%9F%3C%2FP%3E%3CP%3E%E6%95%AC%E4%B8%8A%EF%BC%8C%3CBR%20%2F%3ESanthosh%3C%2FP%3E%3CBR%20%2F%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2289917%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i2c%20call%20back%20is%20not%20getting%20called%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2289917%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F221349%22%20target%3D%22_blank%22%3E%40sushmasan%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%E6%88%91%E8%AE%A4%E4%B8%BA%E6%82%A8%E5%8F%AF%E4%BB%A5%E5%8F%82%E8%80%83%20lpcxpresso55s69_lpc_i2c_interrupt_b2b_transfer_master_cm33_core0%20SDK%20%E6%BC%94%E7%A4%BA%E3%80%82%3C%2FP%3E%0A%3CP%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%20lia-image-align-inline%22%20image-alt%3D%22Harry_Zhang_0-1767855362914.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Harry_Zhang_0-1767855362914.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Harry_Zhang_0-1767855362914.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Harry_Zhang_0-1767855362914.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Harry_Zhang_0-1767855362914.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Harry_Zhang_0-1767855362914.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Harry_Zhang_0-1767855362914.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3CSPAN%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Harry_Zhang_0-1767855362914.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cspan%20class%3D%22lia-inline-image-display-wrapper%22%20image-alt%3D%22Harry_Zhang_0-1767855362914.png%22%20style%3D%22width%3A%20400px%3B%22%3E%3Cimg%20src%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fimage%2Fserverpage%2Fimage-id%2F372099i81F6BE7811F21EFC%2Fimage-size%2Fmedium%3Fv%3Dv2%26amp%3Bpx%3D400%22%20role%3D%22button%22%20title%3D%22Harry_Zhang_0-1767855362914.png%22%20alt%3D%22Harry_Zhang_0-1767855362914.png%22%20%2F%3E%3C%2Fspan%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3E%E5%93%88%E5%88%A9%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2290313%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i2c%20call%20back%20is%20not%20getting%20called%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2290313%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F229957%22%20target%3D%22_blank%22%3E%40Harry_Zhang%3C%2FA%3E%E3%80%81%3C%2FP%3E%3CP%3E%E6%84%9F%E8%B0%A2%E6%82%A8%E7%9A%84%E5%9B%9E%E5%A4%8D%E3%80%82%3C%2FP%3E%3CP%3E%E6%88%91%E7%9A%84%E5%85%B6%E4%BB%96%E4%BC%A0%E6%84%9F%E5%99%A8%E6%A8%A1%E5%9D%97%E4%B9%9F%E5%9C%A8%E4%BD%BF%E7%94%A8%E9%9D%9E%E9%98%BB%E5%A1%9E%E8%B0%83%E7%94%A8%E3%80%82%3C%2FP%3E%3CP%3E%E6%88%91%E4%BD%BF%E7%94%A8%E7%9A%84%E6%98%AF%20BMP390%20%E4%BC%A0%E6%84%9F%E5%99%A8%EF%BC%8CI%C2%B2C%20%E9%80%9A%E4%BF%A1%E5%9C%A8%E9%9D%9E%E9%98%BB%E5%A1%9E%E8%B0%83%E7%94%A8%E6%83%85%E5%86%B5%E4%B8%8B%E5%B7%A5%E4%BD%9C%E6%AD%A3%E5%B8%B8%E3%80%82%E4%BE%8B%E5%A6%82%EF%BC%8C%E5%A6%82%E6%9E%9C%E5%85%B6%E4%B8%AD%E4%B8%80%E4%B8%AA%E5%AF%84%E5%AD%98%E5%99%A8%E7%9A%84%E5%9C%B0%E5%9D%80%E6%98%AF%200x01%EF%BC%8C%E6%88%91%E5%B0%B1%E4%BC%9A%E5%88%86%E9%85%8D%E5%A6%82%E4%B8%8B%E6%89%80%E7%A4%BA%E7%9A%84%E5%AD%90%E5%9C%B0%E5%9D%80%EF%BC%9A%3C%2FP%3E%3CP%3EmasterXfer.subaddress%20%3D%20(uint32_t)0x01%EF%BC%9B%3C%2FP%3E%3CP%3E%3CBR%20%2F%3E%E4%BD%86%E6%98%AF%EF%BC%8C%E5%AF%B9%E4%BA%8E%20DAC%EF%BC%88MCP47FEB21A0%EF%BC%89%E6%A8%A1%E5%9D%97%EF%BC%8C%E5%AD%90%E5%9C%B0%E5%9D%80%E7%9A%84%E5%88%86%E9%85%8D%E6%9C%89%E6%89%80%E4%B8%8D%E5%90%8C%EF%BC%9A%3C%2FP%3E%3CP%3Euint8_t%20subAddress%3B%3CBR%20%2F%3EsubAddress%20%3D%20(uint8_t)(reg_addr%26lt%3B%26lt%3B%203)%3B%20%2F%2F%20%E6%A0%B9%E6%8D%AE%20MCP47FEB21A0%20%E6%95%B0%E6%8D%AE%E6%89%8B%E5%86%8C%EF%BC%8C%E5%AF%84%E5%AD%98%E5%99%A8%E5%9C%B0%E5%9D%80%E5%BF%85%E9%A1%BB%E5%B7%A6%E7%A7%BB%203%3CBR%20%2F%3EmasterXfer.subaddress%20%3D%20(uint32_t)subAddress%3B%3CBR%20%2F%3E%3CBR%20%2F%3E%E4%BC%9A%E6%9C%89%E4%BB%80%E4%B9%88%E4%B8%8D%E5%90%8C%E5%90%97%EF%BC%9F%3C%2FP%3E%3CP%3E%E8%B0%A8%E8%87%B4%3CBR%20%2F%3ESan%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2291427%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i2c%20call%20back%20is%20not%20getting%20called%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2291427%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F221349%22%20target%3D%22_blank%22%3E%40sushmasan%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%E6%88%91%E6%83%B3%E4%BD%A0%E5%8F%AF%E4%BB%A5%E5%B0%9D%E8%AF%95%E5%B0%86%20subAddressSize%20%E8%AE%BE%E7%BD%AE%E4%B8%BA%200%20%E7%84%B6%E5%90%8E%E5%B0%86%20DAC%20%E7%9A%84%E5%91%BD%E4%BB%A4%E5%AD%97%E8%8A%82%E5%92%8C%E6%95%B0%E6%8D%AE%E5%AD%97%E8%8A%82%E7%9B%B4%E6%8E%A5%E6%94%BE%E5%85%A5%20masterXfer.Data%20%E4%B8%AD%EF%BC%8C%E7%84%B6%E5%90%8E%E5%BC%80%E5%A7%8B%E5%86%99%E5%85%A5%E4%BC%A0%E8%BE%93%E3%80%82%3C%2FP%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3E%E5%93%88%E5%88%A9%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2291948%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i2c%20call%20back%20is%20not%20getting%20called%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2291948%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F229957%22%20target%3D%22_blank%22%3E%40Harry_Zhang%3C%2FA%3E%E3%80%81%3C%2FP%3E%3CP%3E%E6%88%91%E7%94%9A%E8%87%B3%E8%AF%95%E8%BF%87%E3%80%81%3C%2FP%3E%3CP%3E%3CSPAN%3Euint8_t%20txData%5B3%5D%20%3D%20%7B0%7D%EF%BC%9B%3C%2FSPAN%3E%3C%2FP%3E%3CDIV%3E%3CDIV%3E%3CP%3E%3CSPAN%3EtxData%5B0%5D%20%3D%20(%3C%2FSPAN%3E%3CSPAN%3Euint8_t%3C%2FSPAN%3E%3CSPAN%3E)%20(reg_addr%26lt%3B%26lt%3B%203)%EF%BC%9B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3EtxData%20%5B1%5D%20%3D%20(%3C%2FSPAN%3E%3CSPAN%3E%20uint8_t)%3C%2FSPAN%3E%3CSPAN%3E%20(%E6%95%B0%E6%8D%AE%20%26gt%3B%20%26gt%3B%208)%3B%3C%2FSPAN%3E%3CSPAN%3E%20%2F*%20%E6%95%B0%E6%8D%AE%20%E9%AB%98%E5%AD%97%E8%8A%82%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3EtxData%20%5B2%5D%20%3D%20(%3C%2FSPAN%3E%3CSPAN%3E%20uint8_t)%3C%2FSPAN%3E%3CSPAN%3E%20(%20%E6%95%B0%E6%8D%AE%20%26amp%3B%200xFFU)%3B%3C%2FSPAN%3E%3CSPAN%3E%20%2F*%20%E6%95%B0%E6%8D%AE%E4%BD%8E%E5%AD%97%E8%8A%82%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3C%2FDIV%3E%3C%2FDIV%3E%3CDIV%3E%3CDIV%3E%3CP%3E%3CSPAN%3EMasterXfer.%3C%2FSPAN%3E%3CSPAN%3E%E6%95%B0%E6%8D%AE%3C%2FSPAN%3E%3CSPAN%3E%3D%20txData%EF%BC%9B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3EMasterXfer%E3%80%82%3C%2FSPAN%3E%3CSPAN%3EdataSiz%3C%2FSPAN%3E%20%3CSPAN%3Ee%20%3D%203%EF%BC%9B%3C%2FSPAN%3E%3CSPAN%3E%2F*%20%E6%80%BB%E8%AE%A1%203%20%E5%AD%97%E8%8A%82%3C%2FSPAN%3E%20*%2F%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CSPAN%3E%E6%88%91%E6%9C%89%E4%B8%80%E4%BA%9B2%E5%AD%97%E8%8A%82%E7%9A%84%E6%95%B0%E6%8D%AE%EF%BC%8C%E6%89%80%E4%BB%A5%E5%9C%A8%E6%B7%BB%E5%8A%A0reg%20addr%E4%B9%8B%E5%90%8E%E5%AE%83%E5%8F%98%E6%88%90%E4%BA%863%E4%B8%AA%E5%AD%97%E8%8A%82%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%E4%BD%BF%E7%94%A8%20I2C_MasterTransferNonBlocking()%20%E6%97%B6%EF%BC%8CI%C2%B2C%20%E5%9B%9E%E8%B0%83%E4%BB%8D%E6%9C%AA%E8%A2%AB%E8%B0%83%E7%94%A8%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CSPAN%3E%E6%AD%A4%E8%87%B4%EF%BC%8C%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%E5%9C%A3%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2292690%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i2c%20call%20back%20is%20not%20getting%20called%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2292690%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E6%98%A8%E5%A4%A9%E6%88%91%E5%9B%9E%E5%A4%8D%E4%BA%86%E6%82%A8%E7%9A%84%E4%BF%A1%E6%81%AF%EF%BC%8C%E4%BD%86%E5%8D%B4%E9%94%99%E5%9B%9E%E5%A4%8D%E4%BA%86%E4%B8%BB%E9%A2%98%E3%80%82%E6%88%91%E4%B8%8D%E7%9F%A5%E9%81%93%E4%BD%A0%E6%98%AF%E5%90%A6%E6%B3%A8%E6%84%8F%E5%88%B0%E4%BA%86%E8%BF%99%E4%B8%80%E7%82%B9%EF%BC%8C%E6%89%80%E4%BB%A5%E6%89%8D%E5%9C%A8%E8%BF%99%E9%87%8C%E5%86%8D%E6%AC%A1%E5%9B%9E%E5%A4%8D%E4%BD%A0%E7%9A%84%E7%95%99%E8%A8%80%E3%80%82%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F229957%22%20target%3D%22_blank%22%3E%40Harry_Zhang%3C%2FA%3E%E3%80%81%3C%2FP%3E%3CP%3E%E6%88%91%E7%94%9A%E8%87%B3%E8%AF%95%E8%BF%87%E3%80%81%3C%2FP%3E%3CP%3E%3CSPAN%3Euint8_t%20txData%5B3%5D%20%3D%20%7B0%7D%EF%BC%9B%3C%2FSPAN%3E%3C%2FP%3E%3CDIV%3E%3CDIV%3E%3CP%3E%3CSPAN%3EtxData%5B0%5D%20%3D%20(%3C%2FSPAN%3E%3CSPAN%3Euint8_t%3C%2FSPAN%3E%3CSPAN%3E)%20(reg_addr%26lt%3B%26lt%3B%203)%EF%BC%9B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3EtxData%20%5B1%5D%20%3D%20(%3C%2FSPAN%3E%3CSPAN%3E%20uint8_t)%3C%2FSPAN%3E%3CSPAN%3E%20(%E6%95%B0%E6%8D%AE%20%26gt%3B%20%26gt%3B%208)%3B%3C%2FSPAN%3E%3CSPAN%3E%20%2F*%20%E6%95%B0%E6%8D%AE%20%E9%AB%98%E5%AD%97%E8%8A%82%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3EtxData%20%5B2%5D%20%3D%20(%3C%2FSPAN%3E%3CSPAN%3E%20uint8_t)%3C%2FSPAN%3E%3CSPAN%3E%20(%20%E6%95%B0%E6%8D%AE%20%26amp%3B%200xFFU)%3B%3C%2FSPAN%3E%3CSPAN%3E%20%2F*%20%E6%95%B0%E6%8D%AE%E4%BD%8E%E5%AD%97%E8%8A%82%20*%2F%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3C%2FDIV%3E%3C%2FDIV%3E%3CDIV%3E%3CDIV%3E%3CP%3E%3CSPAN%3EMasterXfer.%3C%2FSPAN%3E%3CSPAN%3E%E6%95%B0%E6%8D%AE%3C%2FSPAN%3E%3CSPAN%3E%3D%20txData%EF%BC%9B%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3EMasterXfer%E3%80%82%3C%2FSPAN%3E%3CSPAN%3EdataSiz%3C%2FSPAN%3E%20%3CSPAN%3Ee%20%3D%203%EF%BC%9B%3C%2FSPAN%3E%3CSPAN%3E%2F*%20%E6%80%BB%E8%AE%A1%203%20%E5%AD%97%E8%8A%82%3C%2FSPAN%3E%20*%2F%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CSPAN%3E%E6%88%91%E6%9C%89%E4%B8%80%E4%BA%9B2%E5%AD%97%E8%8A%82%E7%9A%84%E6%95%B0%E6%8D%AE%EF%BC%8C%E6%89%80%E4%BB%A5%E5%9C%A8%E6%B7%BB%E5%8A%A0reg%20addr%E4%B9%8B%E5%90%8E%E5%AE%83%E5%8F%98%E6%88%90%E4%BA%863%E4%B8%AA%E5%AD%97%E8%8A%82%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%E4%BD%BF%E7%94%A8%20I2C_MasterTransferNonBlocking()%20%E6%97%B6%EF%BC%8CI%C2%B2C%20%E5%9B%9E%E8%B0%83%E4%BB%8D%E6%9C%AA%E8%A2%AB%E8%B0%83%E7%94%A8%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CBR%20%2F%3E%3CP%3E%3CSPAN%3E%E6%AD%A4%E8%87%B4%EF%BC%8C%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%E5%9C%A3%3C%2FSPAN%3E%3C%2FP%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2295571%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i2c%20call%20back%20is%20not%20getting%20called%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2295571%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F221349%22%20target%3D%22_blank%22%3E%40sushmasan%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%E6%82%A8%E8%83%BD%E5%88%86%E4%BA%AB%E4%B8%80%E4%B8%8B%E6%82%A8%E7%9A%84%E4%BB%A3%E7%A0%81%E5%90%97%EF%BC%9F%3C%2FP%3E%0A%3CP%3EBR%3C%2FP%3E%0A%3CP%3E%E5%93%88%E5%88%A9%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2296081%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i2c%20call%20back%20is%20not%20getting%20called%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2296081%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F229957%22%20target%3D%22_blank%22%3E%40Harry_Zhang%3C%2FA%3E%E3%80%81%3C%2FP%3E%3CP%3E%E8%AF%B7%E6%89%BE%E5%88%B0%E4%BB%A3%E7%A0%81%E7%89%87%E6%AE%B5%E4%BE%9B%E6%82%A8%E5%8F%82%E8%80%83%EF%BC%8C%3C%2FP%3E%3CPRE%20class%3D%22lia-code-sample%20language-cpp%22%3E%3CCODE%20translate%3D%22no%22%3E%23define%20I2C5_BASE%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(0x40096000u)%0A%23define%20I2C5_MASTER_BASE%20%20%20%20(I2C5_BASE)%0A%23define%20I2C5_MASTER_CLOCK_FREQUENCY%20(12000000)%0A%23define%20I2C5_MASTER%20((I2C_Type%20*)%20I2C5_MASTER_BASE)%0A%0Astatic%20void%20i2c_master_callback(I2C_Type%20*base%2C%20i2c_master_handle_t%20*handle%2C%20status_t%20status%2C%20void%20*userData)%0A%7B%09%09%0A%09%2F*%20Signal%20transfer%20success%20when%20received%20success%20status.%20*%2F%0A%09if%20(status%20%3D%3D%20kStatus_Success)%0A%09%7B%0A%09%09%2F%2F%20Successfully%20completed%20data%20transfer%0A%09%09g_MasterCompletionFlag%20%3D%20true%3B%0A%09%09g_i2cCallBackStatus%20%3D%20kStatus_Success%3B%0A%09%7D%0A%09%2F*%20Signal%20transfer%20failure%20when%20received%20failure%20status.%20*%2F%0A%09else%0A%09%7B%0A%09%09if(status%20%3D%3D%20kStatus_I2C_Nak)%0A%09%09%7B%09%09%09%0A%09%09%09g_i2cCallBackStatus%20%3D%20kStatus_I2C_Nak%3B%0A%09%09%7D%0A%09%09else%20if%20(status%20%3D%3D%20kStatus_I2C_Addr_Nak)%0A%09%09%7B%09%09%0A%09%09%09g_i2cCallBackStatus%20%3D%20kStatus_I2C_Addr_Nak%3B%0A%09%09%7D%0A%09%09else%20if%20(status%20%3D%3D%20kStatus_I2C_ArbitrationLost)%0A%09%09%7B%09%09%0A%09%09%09g_i2cCallBackStatus%20%3D%20kStatus_I2C_ArbitrationLost%3B%0A%09%09%7D%0A%09%09else%0A%09%09%7B%09%09%0A%09%09%09g_i2cCallBackStatus%20%3D%20false%3B%0A%09%09%7D%0A%09%7D%0A%0A%09return%3B%0A%7D%0A%0Abool%20i2c_readwrite(i2c_master_transfer_t%20*masterXfer)%0A%7B%0A%09status_t%20status%20%3D%20kStatus_Fail%3B%0A%09status_t%20finalStatus%20%3D%20kStatus_Fail%3B%0A%09bool%20retVal%20%3D%20false%3B%0A%09%0A%09g_MasterCompletionFlag%20%3D%20false%3B%0A%09g_i2cCallBackStatus%20%3D%20kStatus_Fail%3B%0A%0A%09%2F*%20Send%20master%20non-blocking%20data%20to%20slave%20(Performing%20the%20write%20operation)%20*%2F%0A%09%2F*%20Allowing%20the%20CPU%20to%20continue%20executing%20other%20tasks%20in%20parallel%20while%20the%20I2C%20transfer%20is%20being%20handled%20in%20the%20background.%20*%2F%0A%09status%20%3D%20I2C_MasterTransferNonBlocking(I2C5_MASTER%2C%20%26amp%3Bg_m_handle%2C%20masterXfer)%3B%0A%0A%09PRINTF(%22(%25s()%20%3D%26gt%3B%20Wait%20for%20the%20data%20transfer%20to%20slave%20completion.%20status%3A%25d%20%5Cr%5Cn%22%2C__func__%2Cstatus)%3B%0A%0A%09%2F*%20%20Wait%20for%20transfer%20completed.%20*%2F%0A%09while%20(!g_MasterCompletionFlag)%0A%09%7B%0A%09%7D%0A%09g_MasterCompletionFlag%20%3D%20false%3B%0A%0A%09%2F%2F%20Driver-level%20error%20(could%20not%20start%20transfer)%0A%09if(status%20%3D%3D%20kStatus_Success)%0A%09%09retVal%20%3D%20true%3B%0A%09%2F%2F%20Transfer%20completed%0A%09else%0A%09%09retVal%20%3D%20false%3B%0A%09%0A%09g_i2cCallBackStatus%20%3D%20kStatus_Fail%3B%0A%0A%09return%20retVal%3B%0A%7D%0A%0A%2F%2F%20THIS%20IS%20WITH%20I2C%20NON%20BLOCKING%20CALL%20-%26gt%3B%20CALL%20BACK%20IS%20NOT%20GETTING%20INVOKED.%0Abool%20dac_write_reg(uint8_t%20reg_addr%2C%20uint16_t%20data)%0A%7B%0A%09%2F*%20The%20DAC%20needs%201%20address%20byte%20%2B%202%20data%20bytes.%20*%2F%0A%09static%20i2c_master_transfer_t%20masterXfer%20%3D%20%7B0%7D%3B%0A%09static%20uint8_t%20txData%5B3%5D%20%3D%20%7B0%7D%3B%09%0A%09bool%20retVal%20%3D%20false%3B%0A%09bool%20write_status%20%3D%20false%3B%0A%0A%09memset(%26amp%3BmasterXfer%2C%200%2C%20sizeof(masterXfer))%3B%0A%09%0A%09txData%5B0%5D%20%3D%20(uint8_t)%20(reg_addr%20%26lt%3B%26lt%3B%203)%3B%20%0A%09txData%5B1%5D%20%3D%20(uint8_t)(data%20%26gt%3B%26gt%3B%208)%3B%20%20%20%20%20%0A%09txData%5B2%5D%20%3D%20(uint8_t)(data%20%26amp%3B%200xFFU)%3B%20%20%0A%0A%09masterXfer.slaveAddress%20%20%20%3D%200x60%3B%20%20%20%20%20%0A%09masterXfer.direction%20%20%20%20%20%20%3D%20kI2C_Write%3B%0A%09masterXfer.subaddress%20%20%20%20%20%3D%200%3B%0A%09masterXfer.subaddressSize%20%3D%200%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%09masterXfer.data%20%20%20%20%20%20%20%20%20%20%20%3D%20txData%3B%0A%09masterXfer.dataSize%20%20%20%20%20%20%20%3D%203%3B%20%20%20%20%20%20%20%20%20%20%0A%09masterXfer.flags%20%20%20%20%20%20%20%20%20%20%3D%20kI2C_TransferDefaultFlag%3B%20%0A%0A%09write_status%20%3D%20i2c_readwrite(%26amp%3BmasterXfer)%3B%0A%09if(true%20%3D%3D%20write_status)%0A%09%7B%0A%09%09PRINTF(%22(%25s)%20-%26gt%3B%20I2C%20write%20PASS%20%40line%3A%25d%20%5Cr%5Cn%22%2C__func__%2C__LINE__)%3B%0A%0A%09%09retVal%20%3D%20true%3B%0A%09%7D%0A%09else%0A%09%7B%0A%09%09PRINTF(%22(%25s)%20-%26gt%3B%20I2C%20write%20failed%20with%20status%20%25d%20%5Cr%5Cn%22%2C__func__%2Cwrite_status)%3B%0A%0A%09%09retVal%20%3D%20false%3B%0A%09%7D%0A%09%0A%09return%20retVal%3B%0A%7D%0A%0A%0A%2F%2F%20THIS%20IS%20WITH%20I2C%20BLOCKING%20CALL%20-%26gt%3B%20WORKING%20FINE%0Aint8_t%20dac_write_reg(uint8_t%20reg_addr%2C%20uint16_t%20data)%0A%7B%0A%09%2F*%20The%20DAC%20needs%201%20address%20byte%20%2B%202%20data%20bytes.%20*%2F%0A%09i2c_master_transfer_t%20masterXfer%3B%0A%09uint8_t%20txData%5B2%5D%3B%0A%09uint8_t%20subAddress%3B%0A%09%0A%09memset(%26amp%3BmasterXfer%2C%200%2C%20sizeof(masterXfer))%3B%0A%0A%09subAddress%20%3D%20(uint8_t)(reg_addr%20%26lt%3B%26lt%3B%203)%3B%20%2F*%20DAC%20%20reg%20%20byte%20*%2F%0A%09txData%5B0%5D%20%3D%20(uint8_t)(data%20%26gt%3B%26gt%3B%208)%3B%20%20%20%20%20%2F*%20Data%20high%20byte%20*%2F%0A%09txData%5B1%5D%20%3D%20(uint8_t)(data%20%26amp%3B%200xFFU)%3B%20%20%2F*%20Data%20low%20%20byte%20*%2F%0A%0A%09masterXfer.slaveAddress%20%20%20%3D%200x60%3B%20%20%20%20%20%20%0A%09masterXfer.direction%20%20%20%20%20%20%3D%20kI2C_Write%3B%0A%09masterXfer.subaddress%20%20%20%20%20%3D%20(uint32_t)%20subAddress%3B%0A%09masterXfer.subaddressSize%20%3D%201%3B%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%09masterXfer.data%20%20%20%20%20%20%20%20%20%20%20%3D%20txData%3B%0A%09masterXfer.dataSize%20%20%20%20%20%20%20%3D%202%3B%20%20%20%20%20%20%20%20%20%20%0A%09masterXfer.flags%20%20%20%20%20%20%20%20%20%20%3D%20kI2C_TransferDefaultFlag%3B%20%0A%0A%09status_t%20status%20%3D%20I2C_MasterTransferBlocking(I2C5_MASTER%2C%20%26amp%3BmasterXfer)%3B%0A%09if%20(status%20%3D%3D%20kStatus_Success)%20%7B%0A%09%09PRINTF(%22(%25s)%20-%26gt%3B%20dac_write_reg%20PASS%20%40line%3A%25d%20%5Cr%5Cn%22%2C__func__%2C__LINE__)%3B%0A%0A%09%09status%20%3D%201%3B%0A%09%7D%0A%09else%0A%09%7B%0A%09%09PRINTF(%22(%25s)%20-%26gt%3B%20I2C_MasterTransferBlocking()%20failed%20with%20status%20%25d%20%5Cr%5Cn%22%2C__func__%2Cstatus)%3B%0A%0A%09%09status%20%3D%20-1%3B%0A%09%7D%0A%0A%09return%20status%3B%0A%7D%0A%0A%0Aint%20main()%0A%7B%0A%09I2C_MasterGetDefaultConfig(%26amp%3BmasterConfig)%3B%0A%09%0A%09I2C_MasterInit(I2C5_MASTER%2C%20%26amp%3BmasterConfig%2C%20I2C5_MASTER_CLOCK_FREQUENCY)%3B%0A%09%0A%09I2C_MasterTransferCreateHandle(I2C5_MASTER%2C%20%26amp%3Bg_m_handle%2C%20i2c_master_callback%2C%20NULL)%3B%0A%0A%09dac_write_reg(0x08%2C%200x0001)%3B%0A%7D%3C%2FCODE%3E%3C%2FPRE%3E%3C%2FLINGO-BODY%3E%3CLINGO-SUB%20id%3D%22lingo-sub-2298132%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%20translate%3D%22no%22%3ERe%3A%20i2c%20call%20back%20is%20not%20getting%20called%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2298132%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%E4%BD%A0%E5%A5%BD%3CA%20href%3D%22https%3A%2F%2Fcommunity.nxp.com%2Ft5%2Fuser%2Fviewprofilepage%2Fuser-id%2F221349%22%20target%3D%22_blank%22%3E%40sushmasan%3C%2FA%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%20data-slate-fragment%3D%22JTVCJTdCJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMmNoaWxkcmVuJTIyJTNBJTVCJTdCJTIyaWQlMjIlM0ElMjJ6bExZMU1Ea1h6JTIyJTJDJTIycGFyYUlkeCUyMiUzQTAlMkMlMjJzcmMlMjIlM0ElMjJpJTIwaGF2ZSUyMHJldmlld2VkJTIweW91ciUyMGNvZGUuJTIyJTJDJTIyZHN0JTIyJTNBJTIyJUU2JTg4JTkxJUU1JUI3JUIyJUU3JUJCJThGJUU1JUFFJUExJUU2JTlGJUE1JUU0JUJBJTg2JUU0JUJEJUEwJUU3JTlBJTg0JUU0JUJCJUEzJUU3JUEwJTgxJUUzJTgwJTgyJTIyJTJDJTIybWV0YWRhdGElMjIlM0ElMjIlMjIlMkMlMjJtYXRjaGVzJTIyJTNBbnVsbCUyQyUyMnRyYW5zbGF0ZWRCeSUyMiUzQW51bGwlMkMlMjJtZXRhRGF0YSUyMiUzQSU1QiU1RCUyQyUyMnRleHQlMjIlM0ElMjJpJTIwaGF2ZSUyMHJldmlld2VkJTIweW91ciUyMGNvZGUuJTIyJTdEJTVEJTdEJTVE%22%3E%E6%88%91%E6%9F%A5%E7%9C%8B%E4%BA%86%E6%82%A8%E7%9A%84%E4%BB%A3%E7%A0%81%E3%80%82%20%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%20data-slate-fragment%3D%22JTVCJTdCJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMmNoaWxkcmVuJTIyJTNBJTVCJTdCJTIyaWQlMjIlM0ElMjJ6bExZMU1Ea1h6JTIyJTJDJTIycGFyYUlkeCUyMiUzQTAlMkMlMjJzcmMlMjIlM0ElMjJpJTIwaGF2ZSUyMHJldmlld2VkJTIweW91ciUyMGNvZGUuJTIyJTJDJTIyZHN0JTIyJTNBJTIyJUU2JTg4JTkxJUU1JUI3JUIyJUU3JUJCJThGJUU1JUFFJUExJUU2JTlGJUE1JUU0JUJBJTg2JUU0JUJEJUEwJUU3JTlBJTg0JUU0JUJCJUEzJUU3JUEwJTgxJUUzJTgwJTgyJTIyJTJDJTIybWV0YWRhdGElMjIlM0ElMjIlMjIlMkMlMjJtYXRjaGVzJTIyJTNBbnVsbCUyQyUyMnRyYW5zbGF0ZWRCeSUyMiUzQW51bGwlMkMlMjJtZXRhRGF0YSUyMiUzQSU1QiU1RCUyQyUyMnRleHQlMjIlM0ElMjJpJTIwaGF2ZSUyMHJldmlld2VkJTIweW91ciUyMGNvZGUuJTIyJTdEJTVEJTdEJTVE%22%3E%E4%BD%86%E5%BE%88%E6%8A%B1%E6%AD%89%EF%BC%8C%E6%88%91%E6%89%BE%E4%B8%8D%E5%88%B0%E6%98%8E%E6%98%BE%E7%9A%84%E9%94%99%E8%AF%AF%E3%80%82%E6%88%91%E8%AE%A4%E4%B8%BA%E6%82%A8%E8%BF%98%E5%8F%AF%E4%BB%A5%E4%BD%BF%E7%94%A8%E7%A4%BA%E6%B3%A2%E5%99%A8%E6%9D%A5%E6%A3%80%E6%9F%A5%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE%E4%BB%A5%E5%8F%8A%E8%BF%94%E5%9B%9E%E7%9A%84%E6%95%B0%E6%8D%AE%E6%98%AF%E5%90%A6%E6%AD%A3%E7%A1%AE%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%20data-slate-fragment%3D%22JTVCJTdCJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMmNoaWxkcmVuJTIyJTNBJTVCJTdCJTIyaWQlMjIlM0ElMjJ6bExZMU1Ea1h6JTIyJTJDJTIycGFyYUlkeCUyMiUzQTAlMkMlMjJzcmMlMjIlM0ElMjJpJTIwaGF2ZSUyMHJldmlld2VkJTIweW91ciUyMGNvZGUuJTIyJTJDJTIyZHN0JTIyJTNBJTIyJUU2JTg4JTkxJUU1JUI3JUIyJUU3JUJCJThGJUU1JUFFJUExJUU2JTlGJUE1JUU0JUJBJTg2JUU0JUJEJUEwJUU3JTlBJTg0JUU0JUJCJUEzJUU3JUEwJTgxJUUzJTgwJTgyJTIyJTJDJTIybWV0YWRhdGElMjIlM0ElMjIlMjIlMkMlMjJtYXRjaGVzJTIyJTNBbnVsbCUyQyUyMnRyYW5zbGF0ZWRCeSUyMiUzQW51bGwlMkMlMjJtZXRhRGF0YSUyMiUzQSU1QiU1RCUyQyUyMnRleHQlMjIlM0ElMjJpJTIwaGF2ZSUyMHJldmlld2VkJTIweW91ciUyMGNvZGUuJTIyJTdEJTVEJTdEJTVE%22%3EBR%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%3CSPAN%20data-slate-fragment%3D%22JTVCJTdCJTIydHlwZSUyMiUzQSUyMnBhcmFncmFwaCUyMiUyQyUyMmNoaWxkcmVuJTIyJTNBJTVCJTdCJTIyaWQlMjIlM0ElMjJ6bExZMU1Ea1h6JTIyJTJDJTIycGFyYUlkeCUyMiUzQTAlMkMlMjJzcmMlMjIlM0ElMjJpJTIwaGF2ZSUyMHJldmlld2VkJTIweW91ciUyMGNvZGUuJTIyJTJDJTIyZHN0JTIyJTNBJTIyJUU2JTg4JTkxJUU1JUI3JUIyJUU3JUJCJThGJUU1JUFFJUExJUU2JTlGJUE1JUU0JUJBJTg2JUU0JUJEJUEwJUU3JTlBJTg0JUU0JUJCJUEzJUU3JUEwJTgxJUUzJTgwJTgyJTIyJTJDJTIybWV0YWRhdGElMjIlM0ElMjIlMjIlMkMlMjJtYXRjaGVzJTIyJTNBbnVsbCUyQyUyMnRyYW5zbGF0ZWRCeSUyMiUzQW51bGwlMkMlMjJtZXRhRGF0YSUyMiUzQSU1QiU1RCUyQyUyMnRleHQlMjIlM0ElMjJpJTIwaGF2ZSUyMHJldmlld2VkJTIweW91ciUyMGNvZGUuJTIyJTdEJTVEJTdEJTVE%22%3E%E5%93%88%E5%88%A9%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E