Forum: Mikrocontroller und Digitale Elektronik Ti f28035 Einstieg


von Maxim (Gast)


Lesenswert?

Hallo alle zusammen,


Ich bin ganz neu in Welt der  ti microcontroller und versuche ich einen 
schnellen Einstieg zu verschaffen. Ich muss ganz ehrlich zu geben. Der 
Einstieg ist nicht so ganz leicht wie ich gedacht hätte. Aus diesem 
Grund  frage ich  die erfahrene von euch wie kann ich mr einen schnellen 
Einstieg ermöglichen damit ich schnelle weiterkommen kann.

Die Welt der microcontroller ist nicht was ganz neu für nur ist leider 
einmischen lange her,  dass ich mit atmega was gemacht habe (8 Bit) und 
was ich jetzt lerne ist 32 Bit .

Ich bedanke für jeden Rat

von PittyJ (Gast)


Lesenswert?

Schnell geht da nicht. Es hilft nur 
lesen/ausprobieren/lesen/ausprobieren.
Immerhin ist die Doku von TI sehr gut, es ist alles beschrieben. Aber 
für die Anwendungen muss man sich durch jedes Subsystem (Timer, 
SPI,....) einzeln durchkämpfen.

Und falls man in C arbeitet: der Prozessor ist 16 Bit orientiert. Es 
gibt keine Bytes und einen Zugriff darauf. Das ist ungewohnt, gerade bei 
Strings.

Ich hatte ein Development-System und habe erst mal einen Monat damit 
'gespielt', bevor es an die richtige Hardware ging.

von Maxim (Gast)


Lesenswert?

Ich habe es mir einen TIC2000 Workshop besorgt aber viel verstehe ich 
nicht. Es ist irgendwie andres im vergleich mit Atmel.

von Maxim (Gast)


Lesenswert?

Gibt es irgendwie Deutsche Literatur ?

von PittyJ (Gast)


Lesenswert?

Was deutsches gibt es gar nicht. Alles von TI ist englisch.
Aber das ist doch fast überall so.

Aber wenn man mit C arbeitet, hat man doch eine 'normale' Struktur.
Dann muss man der Reihe nach die benötigten IO-System einschalten, (Bits 
setzen bei bekannten Adressen) und dann damit arbeiten. Das gesamte 
IO-System ist Memory-Mapped, arbeitet sich recht angenehm.

Aber schnell geht da nichts. Die Einarbeitung dauert ein paar Wochen.

von Micha (Gast)


Lesenswert?

Was auf jeden Fall empfehlenswert ist: "2803x C/C++ Header Files and 
Peripheral Examples". Dort gibt es Beispiele für jede Peripherie. Vor 
allem findest du dort auch Linker command Files, die du erstmal 
verwenden kannst ohne dich allzusehr damit auseinansetzen zu müssen.

Was ich bei TI vermisse ist eine Art Treiber-Bibliothek zur 
Konfiguration/Ansteuerung der einzelnen Peripherien, wie sie bspw. für 
STM32 existiert.

von 6A66 (Gast)


Lesenswert?

Maxim schrieb:
> Ich habe es mir einen TIC2000 Workshop besorgt aber viel verstehe ich
> nicht. Es ist irgendwie andres im vergleich mit Atmel.

Hallo Maxim,

der Eintagesworkshop (war seienrzeit für 99EUR) hat schon etwas 
geholfen. Ich gebe aber meinem Vorredner recht: Der C2000 ist sehr 
komplex, die Doku SEHR ausführlich, du musst Dich durch alles 
durchkämpfen sonst klappt das nicht. Auch die IDE will erst mal geübt 
werden - ist aber prinzipiell eine Eclipse, das Debuggen geht deutlich 
komfortabler als mit der normalen Eclipse bei z.B. einem STM32 (habe 
direkten Vergleich).

PittyJ schrieb:
> Aber schnell geht da nichts. Die Einarbeitung dauert ein paar Wochen.

Voll ACK.

Vorteil: Wenn du den Dreh raus hast ist das System mit den Timern jedem 
Cortex-M3 überlegen. Auch die ADCs sind eine Dimension besser und 
schneller.

rgds

von Maxim (Gast)


Lesenswert?

Hallo alle zusammen,

Ich habe eine Frage:

Ich will mit der TMS320C2000 Experiment Kit einen Menu mit einem 
Terminal Programm schreiben.
Da es in der Lib von Ti zwei fertige Methode gibt, die ich gerne 
benutzen möchte aber ich weiss es nicht wie ich das ambesten machen 
sollte.

Die Methoden, die ich brauche habe ich importiert wie folgende:
//
extern void SetupSerialPort(void);
extern void SCITransmitByte(unsigned char data);
extern unsigned char SCIReceiveByte(void);
//
diese Methoden stammen aus der Lib  "SerialPortDrv.c"
--> hier ist die Datei:
#include "DSP28x_Project.h"
//---------------------------------------------------------------------- 
-----
// For Portability, User Is Recommended To Use the C99 Standard integer 
types
//

#include <assert.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

extern uint32_t McuE_GetSystemClock();
// ******************************************************
// bool SciDataAvailable()
//
//  This function is used to check if there is any data
//  in the serial port receive fifo.
//
// Return values:
//  true : There is one or more bytes in the fifo buffer
//  false: The fifo buffer is empty
// ******************************************************
int SCIDataAvailable()
{
  return ((SciaRegs.SCIFFRX.all & 0x1F00)!=0);
}


// ******************************************************
// unsigned char SCIReceiveByte()
//
//  This function is used to receive a single byte from
//  serial ports receive fifo buffer.
//
// Return values:
//  The first (oldest) byte in the fifo buffer
// ******************************************************
unsigned char SCIReceiveByte()
{
  return SciaRegs.SCIRXBUF.all;
}


// ******************************************************
// void SCITransmitByte(unsigned char data)
//
//  This function is used to transmit a single byte on
//  the serial port.
//
// Parameters:
//  data: The byte to transmit.
// ******************************************************
void SCITransmitByte(unsigned char data)
{
  //Note: Some TI DSPs have smaller IO buffers. Use 0x0300 for these
  //1. If the fifo buffer is full we should wait
  while((SciaRegs.SCIFFTX.all &0x1F00)>0x0300) ;
  //while((SciaRegs.SCIFFTX.all &0x1F00)>0x0C00) ;
      //kickdog();

  //2. Write the data byte to the fifo buffer
  SciaRegs.SCITXBUF=data;
}

void SetupSerialPort()
{
   uint32_t SystemClockFrequency = McuE_GetSystemClock();


  // *** Calculate the BRR ***
  //
  //          CPUCLK>>LOW_SPEED_CLOCK_DIVIDER
  //  BRR = ----------------------------------  - 1
  //                    8*BAUDRATE


  /* Low speed clock = 15 MHz (60/4 MHz), Baudrate = 115200 baud */
  //uint32_t BRR = (60000000UL >> (SysCtrlRegs.LOSPCP.all))/(115200<<3) 
- 1;
  //uint32_t BRR = (SystemClockFrequency >> 
(SysCtrlRegs.LOSPCP.all))/(921600<<3) - 1;
  uint32_t BRR = (SystemClockFrequency >> 
(SysCtrlRegs.LOSPCP.all))/(115200<<3) - 1;

  EALLOW;

  SciaRegs.SCICTL1.all=0x0003;     // Reset SCI

   SciaRegs.SCIFFTX.all=0xE040;
   SciaRegs.SCIFFRX.all=0x2044;
   SciaRegs.SCIFFCT.all=0x0;

  SciaRegs.SCICTL2.all=0x0000;

  // Set the baud rate
  SciaRegs.SCIHBAUD=(uint16_t)(BRR>>8) & 0xFF;
  SciaRegs.SCILBAUD=(uint16_t)BRR & 0xFF;

  SciaRegs.SCIPRI.all=0x0018;
  SciaRegs.SCICCR.all=0x0007;    // 8 bit character length, No parity, 1 
stop bit
  SciaRegs.SCICTL1.all=0x0023;     // Enable the SCI

    EDIS;
}

--> mein main()Methode sieht so aus:

void main (void)
{

   INT32U   SystemClockFrequency;
   INT16U   i;

   // Init BSW drivers
   EcuM_InitDrivers();

   // For Debug - I/O
   SetupSerialPort();

   // Sign-on
   SystemClockFrequency = McuE_GetSystemClock();
   #pragma diag_suppress 183
   LDEBUG_PRINTF("BSW_MCU: %s   Clock: %08ul\n", CORE_CPU_DESCRIPTION, 
SystemClockFrequency);
   #pragma diag_default 183
   i = 0;
   while (true)
   {
      printf("***Hello Word*****!    %d\r\n", i++);
      DELAY_US(500000);      // .5 sec

   }
}
bis dahin funktioniert alles nur weiss ich leider nicht wie ich einen 
Menu schreibe mit Hilfe der beide Methode :
                          SCITransmitByte(unsigned char data)
                          und
                          unsigned char SCIReceiveByte().

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.