在线时间5 小时
UID3538995
注册时间2019-2-17
NXP金币0
该用户从未签到
新手上路

- 积分
- 25
- 最后登录
- 2019-2-27
|

楼主 |
发表于 2019-2-19 21:46:29
|
显示全部楼层
Hi 小恩GG
感謝您的回覆!
請問如果要將I2C1 設定成slave mode
使用外部的I2C工具傳送訊號
請問有相關的sample 嗎?
目前我這樣寫接收不到訊號
請求高手給予建議
#include "board.h"
/* System clock is set to 24MHz, I2C clock is set to 600kHz */
#define I2C_CLK_DIVIDER (40)
/* 100KHz I2C bit-rate */
#define I2C_BITRATE (100000)
/** Our slave address and I2C information */
#define LPC_I2C_SLAVE LPC_I2C1
#define I2C_ADDR_SLAVE (0x32)
/*****************************************************************************
* Private functions
****************************************************************************/
/* Initializes pin muxing for I2C interface */
static void Init_I2C_PinMux(void)
{
#if (defined(BOARD_NXP_LPCXPRESSO_812) || defined(BOARD_LPC812MAX) || defined(BOARD_NXP_LPCXPRESSO_824))
/* Enable the clock to the Switch Matrix */
Chip_Clock_EnablePeriphClock(SYSCTL_CLOCK_SWM);
#if defined(BOARD_NXP_LPCXPRESSO_824)
Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SDA);
Chip_SWM_EnableFixedPin(SWM_FIXED_I2C0_SCL);
Chip_SWM_MovablePinAssign(SWM_I2C1_SDA_IO, 15);
Chip_SWM_MovablePinAssign(SWM_I2C1_SCL_IO, 14);
#else
/* Connect the I2C_SDA and I2C_SCL signals to port pins(P0.10, P0.11) */
Chip_SWM_MovablePinAssign(SWM_I2C_SDA_IO, 10);
Chip_SWM_MovablePinAssign(SWM_I2C_SCL_IO, 11);
#endif
/* Enable Fast Mode Plus for I2C pins */
Chip_IOCON_PinSetI2CMode(LPC_IOCON, IOCON_PIO10, PIN_I2CMODE_FASTPLUS);
Chip_IOCON_PinSetI2CMode(LPC_IOCON, IOCON_PIO11, PIN_I2CMODE_FASTPLUS);
/* Disable the clock to the Switch Matrix to save power */
Chip_Clock_DisablePeriphClock(SYSCTL_CLOCK_SWM);
#else
/* Configure your own I2C pin muxing here if needed */
#warning "No I2C pin muxing defined"
#endif
}
static void setupI2CMaster()
{
/* Enable I2C clock and reset I2C peripheral */
Chip_I2C_Init(LPC_I2C);
/* Setup clock rate for I2C */
Chip_I2C_SetClockDiv(LPC_I2C, I2C_CLK_DIVIDER);
/* Setup I2CM transfer rate */
Chip_I2CM_SetBusSpeed(LPC_I2C, I2C_BITRATE);
/* Enable Master Mode */
Chip_I2CM_Enable(LPC_I2C);
}
static void setupI2CSlave(void)
{
/* Some common I2C init was performed in setupI2CMaster(), so it doesn't
need to be done again for the slave setup. */
Chip_I2C_Init(LPC_I2C_SLAVE);
/* Emulated EEPROM 0 is on slave index 0 */
Chip_I2CS_SetSlaveAddr(LPC_I2C_SLAVE, 0, I2C_ADDR_SLAVE);
/* Disable Qualifier for Slave Address 0 */
Chip_I2CS_SetSlaveQual0(LPC_I2C_SLAVE, false, 0);
/* Enable Slave Address 0 */
Chip_I2CS_EnableSlaveAddr(LPC_I2C_SLAVE, 0);
/* Clear interrupt status and enable slave interrupts */
Chip_I2CS_ClearStatus(LPC_I2C_SLAVE, I2C_STAT_SLVDESEL);
Chip_I2C_EnableInt(LPC_I2C_SLAVE, I2C_INTENSET_SLVPENDING | I2C_INTENSET_SLVDESEL);
/* Enable I2C slave interface */
Chip_I2CS_Enable(LPC_I2C_SLAVE);
}
void I2C_IRQHandler(void)
{
printf("I2C_IRQHandler \r\n");
}
void I2C1_IRQHandler(void)
{
printf("LPC_I2C_SLAVE_HANDLER \r\n");
}
/**
* @brief Main routine for I2C example
* @return Function should not exit
*/
int main(void)
{
printf("Start");
uint32_t i;
uint8_t testFail = 0;
/* Generic Initialization */
SystemCoreClockUpdate();
/* Setup I2C pin muxing */
Init_I2C_PinMux();
setupI2CMaster();
setupI2CSlave();
/* Enable the interrupt for the I2C */
NVIC_EnableIRQ(I2C_IRQn);
NVIC_EnableIRQ(I2C1_IRQn);
while(1)
{
printf("Start 3");
__WFI();
}
}
Thanks!
|
|