Forum: Mikrocontroller und Digitale Elektronik TWI bei UC3C 32bit Controller


von Manu (Gast)


Lesenswert?

Hallo Zusammen

Ich benutze meinen UC3C Controller um mit dem Two Wire Interface. 
Angeschlossen habe ich eine RTC an TWIMS2. Und möchte nun die 
Schnittstelle initialisieren, doch beim Befehl "twim_master_init(&TWIM, 
&TWI_Settings)" hält das Programm bzw der Debugger an und reagiert nicht 
mehr.
Hatte jemand schon ein ähnliches Problem und konnte dies lösen? Danke 
für Tipps und Grüsse Manu

#include "twim.h"
#define TWIM AVR32_TWIM2
#define RTC_SLAVE_ADDRESS   0xD0
#define GPIO_FUNCTION_E      4
#define PIN_SCL         71 // clk
#define PIN_SDA         70 // Data

gpio_enable_gpio_pin(PIN_SCL);
  gpio_enable_gpio_pin(PIN_SDA);
  gpio_enable_module_pin(PIN_SCL, GPIO_FUNCTION_E); //pin as function E
  gpio_enable_module_pin(PIN_SDA, GPIO_FUNCTION_E);

  twim_options_t TWI_Settings;
  TWI_Settings.chip = RTC_SLAVE_ADDRESS;
  TWI_Settings.pba_hz = PBA_CLOCK; //pba_hz = 33000000
  TWI_Settings.smbus = false; //sm_bus = false
  TWI_Settings.speed = TWI_FAST_MODE_SPEED; //speed  = 400000

  twim_master_enable(&TWIM); // weiss ned ob das nötig esch
  twim_master_init(&TWIM, &TWI_Settings);

von Manu (Gast)


Lesenswert?

Sorry, hier mit korrekter formatierung
1
#include "twim.h"
2
#define TWIM AVR32_TWIM2
3
#define RTC_SLAVE_ADDRESS   0xD0
4
#define GPIO_FUNCTION_E      4
5
#define PIN_SCL         71 // clk
6
#define PIN_SDA         70 // Data
7
8
gpio_enable_gpio_pin(PIN_SCL);
9
  gpio_enable_gpio_pin(PIN_SDA);
10
  gpio_enable_module_pin(PIN_SCL, GPIO_FUNCTION_E); //pin as function E
11
  gpio_enable_module_pin(PIN_SDA, GPIO_FUNCTION_E);
12
13
  twim_options_t TWI_Settings;
14
  TWI_Settings.chip = RTC_SLAVE_ADDRESS;
15
  TWI_Settings.pba_hz = PBA_CLOCK; //pba_hz = 33000000
16
  TWI_Settings.smbus = false; //sm_bus = false
17
  TWI_Settings.speed = TWI_FAST_MODE_SPEED; //speed  = 400000
18
19
  twim_master_enable(&TWIM); 
20
  twim_master_init(&TWIM, &TWI_Settings);

von (prx) A. K. (prx)


Lesenswert?

Manu schrieb:
> #define RTC_SLAVE_ADDRESS   0xD0

Wie üblich stellt sich an solcher Stelle die Frage, ob da die 7-Bit oder 
die 8-Bit Adresse angegeben werden muss.

von Sam (Gast)


Lesenswert?

Siehe Hier:

http://www.mikrocontroller.net/articles/AVR32-Tutorial

Wichtig:
Damit die Hardware-Funktionen auch verwendet werden können, muss im 
Register "Gper" der Pin deaktiviert werden, da sonst der Port ganz 
normale GPIO-Funktionen hat.

eventuell hilf dies

von Thomas (Gast)


Lesenswert?

Der Pin wird automatisch als GPIO deaktiviert:)

Auszug aus der gpio_enable_module_pin(pin, funktion) Funktion
1
case 7: /* H function. */
2
      gpio_port->pmr0s = 1 << (pin & 0x1F);
3
      gpio_port->pmr1s = 1 << (pin & 0x1F);
4
      gpio_port->pmr2s = 1 << (pin & 0x1F);
5
      break;
6
#endif
7
8
   default:
9
      return GPIO_INVALID_ARGUMENT;
10
   }
11
12
   /* Disable GPIO control. */ // Hier erfolgt die Deaktivierung!!
13
   gpio_port->gperc = 1 << (pin & 0x1F);
14
15
   return GPIO_SUCCESS;

von Thomas (Gast)


Lesenswert?

A. K. schrieb:
> Wie üblich stellt sich an solcher Stelle die Frage, ob da die 7-Bit oder
> die 8-Bit Adresse angegeben werden muss.

Es handelt sich um eine 8bit Adresse laut Datenblatt. Ich kann mir eher 
vorstellen das mit der Pinbelegung falsch ist, bzw diese nicht für eine 
Master Slave Kommunikation verwendbar sind. (verwende TWIMS2, evt l.ist 
diese falsch)

von Manu (Gast)


Lesenswert?

So der Fehler ist nun gefunden, da es aber niemand interessiert muss ich 
ihn hier ja auch nicht erzählen.

Gruss Manuel

von Chris (Gast)


Lesenswert?

Mich interessiert es!

Gruß Chris

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.