I2C ATSAME70N20

OP #7612854
Lesenswert?

Moin, ich bin gerade auf der Fehlersuche an der I2C/TWI Schnittstelle am ATSAME70N20. Ich hänge nur mit 2 Pullups (4,7K) und Oszi an der Schnittstelle und sehe 3,3V. Ich nutze die TWIHS0 an PA3 und PA4, dazu aktuell noch den Systemtakt mit 12MHz.

Ich bin ein bisschen Ideenlos warum gar nichts passiert. (Weder Takt noch Daten).

Hier mein Code:

1
#include "I2C.h"
2
#include "sam.h"
3
#include "same70n20.h"
4

5
#define I2C_CLK_SPEED   100000
6
#define I2C_MODULE    TWIHS0
7

8
void I2C_Master_Init(void){
9
  /* Enable TWI peripheral clock */
10
  PMC->PMC_PCER0 = PMC_PCER0_PID19;
11
  
12
  /* Configure PIOA Pins for I2C */
13
  PIOA->PIO_PDR = (PIO_PDR_P3 | PIO_PDR_P4);
14
    PIOA->PIO_ABCDSR[0] &= ~(PIO_ABCDSR_P3 | PIO_ABCDSR_P4);
15
    PIOA->PIO_ABCDSR[1] &= ~(PIO_ABCDSR_P3 | PIO_ABCDSR_P4);
16
  
17
  /* Configure TWI clock waveform generator */
18
  I2C_MODULE->TWIHS_CWGR =  TWIHS_CWGR_CLDIV(((SystemCoreClock / (2 * I2C_CLK_SPEED))) - 3) |
19
                TWIHS_CWGR_CHDIV(((SystemCoreClock / (2 * I2C_CLK_SPEED))) - 3) |
20
                TWIHS_CWGR_CKDIV(0);          
21
  /* Enable TWI module */
22
  I2C_MODULE->TWIHS_CR = TWIHS_CR_SWRST;
23
  I2C_MODULE->TWIHS_CR = TWIHS_CR_SVDIS;
24
  I2C_MODULE->TWIHS_CR = TWIHS_CR_MSEN; 
25
}
26

27
uint8_t I2C_write_data(uint8_t* data, uint8_t length, uint8_t sendStopCondition, uint8_t address) {
28
  //Set slave address    
29
  I2C_MODULE->TWIHS_MMR = TWIHS_MMR_IADRSZ(0);
30
  I2C_MODULE->TWIHS_MMR |= TWIHS_MMR_DADR(address);
31
  I2C_MODULE->TWIHS_MMR &=~ TWIHS_MMR_MREAD;  
32
  I2C_MODULE->TWIHS_CR = TWIHS_CR_MSEN;
33
  
34
    for (uint8_t i = 0; i < length; i++){
35
    //send data
36
         I2C_MODULE->TWIHS_THR = data[i];
37
         while(!(I2C_MODULE->TWIHS_SR & TWIHS_SR_TXRDY));
38
  }
39
  
40
  //if we have to send stop condition (instead of a new start condition)
41
  if(sendStopCondition){
42
    /* Send stop condition */
43
    I2C_MODULE->TWIHS_CR = TWIHS_CR_STOP;
44
    while (!(I2C_MODULE->TWIHS_SR & TWIHS_SR_TXCOMP));
45
    }
46
  return I2C_NO_ERROR_DETECTED;
47
}

Hat jemand von euch noch eine zündende Idee? Gruß Hannes

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren