Kinetis K70 as I2C-Slave

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

Kinetis K70 as I2C-Slave

跳至解决方案
2,022 次查看
andy87
Contributor II

Hallo,

I have a problem to configure the Kinetis K70 as a I2C-Slave.

My Master send the Slave-address but I get always a NACK from my K70.

I have a short example to check the Slave-address.

Here my configuration:

SIM_SCGC4 |= 0x40; //Turn on clock to I2C0 module  

PORTE_PCR19 = PORT_PCR_MUX(4); // SCL

PORTE_PCR18 = PORT_PCR_MUX(4); //SDA

I2C0_A1 = 0x6;                  // Slave-address
I2C0_C1 |= I2C_C1_IICEN_MASK;   /* enable IIC */
I2C0_C1 |= I2C_C1_IICIE_MASK;   // interrupt enable

I2C0_C1 &= ~0x10;

I2C0_C1 &= ~I2C_C1_MST_MASK;

At the moment i have only an ISR, which toggels LED's  if the Slave address is correct.

void i2c0_isr (void)

{

     GPIOA_PDOR &= ~GPIO_PDOR_PDO(GPIO_PIN(11));

     GPIOA_PDOR &= ~GPIO_PDOR_PDO(GPIO_PIN(10));

     I2C0_S |= 0x2;

}

I dont know where my mistake is. Have anyone an idea??

Could it be a timing problem?

1 解答
886 次查看
andy87
Contributor II

Problem is solved:).

My mistake was that I turned on all port clocks after the I2C-Init.

I make it now before the Init and the problem is away.

Best Regards,

Andy

在原帖中查看解决方案

4 回复数
887 次查看
andy87
Contributor II

Problem is solved:).

My mistake was that I turned on all port clocks after the I2C-Init.

I make it now before the Init and the problem is away.

Best Regards,

Andy

886 次查看
DavidS
NXP Employee
NXP Employee

Hi Andy,

Thanks for sharing the solution.

Congratulations!

Regards,

David

886 次查看
andy87
Contributor II

Hi David,

Thank u for your answer.

I enabled the interrupts as u discribed. I just set no priority, because this is my only interrupt in my testing-program right now.

But I saw that the program run into the isr_default-Interrupt if i wanna set the slave address and the Port-Control-Register to change the GPIO to SDA-functionalty.

It returns then back to the main, but I have no idea why the program jump into the ísr_default.

So I think the program set not really my SDA-Port and my Slave-Address.

Regards,

Andy

0 项奖励
886 次查看
DavidS
NXP Employee
NXP Employee

Hi Andreas,

Please make sure you are enabling the interrupt at all levels:

- module (as you've done in your application)

- NVIC (ex:    enable_irq(30); don't forget to set the priority too:  set_irq_priority (int irq, int prio); )

- core (#define EnableInterrupts asm(" CPSIE i"); )

Regards,

David