Hello,
I use PMBus module with Manual Slave Address Acknowledgement Mode(MAN_SLAVE_ACK = 1)
following codes are enabled them
// Initial PMBus_A Configuration(PEC enabled, manual address & command, manual ACK for RX byte set to 1)
PMBus_configTarget(PMBUSA_BASE,
PMBUS_TARGET_ENABLE_PEC_PROCESSING |
PMBUS_TARGET_ENABLE_MANUAL_ACK |
PMBUS_TARGET_ENABLE_MANUAL_CMD_ACK |
PMBUS_TARGET_AUTO_ACK_1_BYTES);
// Initial PMBus_A interrupt triggered types
PMBus_enableInterrupt(PMBUSA_BASE,
PMBUS_INT_TARGET_ADDR_READY |
PMBUS_INT_DATA_READY |
PMBUS_INT_DATA_REQUEST |
PMBUS_INT_EOM);
==================================================
In PMBus_A interrupt ISR, I would use following source codes to send ACK when Slave address received interrupt is happened:
// Get Current PMBus_A State
g_PMBus_CTRL_VAR.pmbus_a_sta = PMBus_getStatus(PMBUSA_BASE);
// Slave address received
if(g_PMBus_CTRL_VAR.pmbus_a_sta & (uint32_t)PMBUS_INTSRC_TARGET_ADDR_READY)
{
// Re-initial PMBus Buffer
Initial_Ctrl_Buffer();
PMBus_ackAddress(PMBUSA_BASE, (PMBUS_SLAVE_ADDR >> 1),
g_PMBus_CTRL_VAR.pmbus_a_sta,
&g_PMBus_CTRL_VAR.rev_slave_addr);
}
But slave always sends NACk to I2C master.
Does any configuration/action need to check out?