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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.