//           ********************
//           *Testschaltung 5435*
//           ********************
//      Flüssigkristallanzeige graph. FKA LC7981

//                 MSP430F5435
//              -----------------
//              |              XIN|- 32,768kHz
//              |                 |
//  Taster rot--|RST          XOUT|- 32,768kHz
//                            P7.7| LED rot
//              |             P7.6| LED gelb
//                            P2.2| FKA Steuerung RS- (4)
// 25Mhz  X2IN- |             P2.1| FKA Steuerung R/W-(5)
//              |             P2.0| FKA Steuerung E   (6)
// 25MHz X2OUT- |       P1.0..P1.7| Daten FKA
//              |                 |
//              |             P3.0|   SPI BL1              
//       UTXD0  |P3.4         P3.1|-> Daten Ausgang    SPI/I²C      
//       URXD0  |P3.5         P3.2|<- Data In  (SOMI0) SPI/I²C          
//       UTXD1  |P3.6         P3.3|-> Serial Clock Out (UCLK) SPI/I²C   
//       URXD1  |P3.7
//              |             P4.0|
//                            P4.1|
//                            P4.2|
//                            P4.3|
//              |             P4.6|
//              |             P4.7|
//    SD-CS     |P5.0         P2.7| SD Karte Einsteckkontrolle
//    SD-DI     |P5.1         P2.6|
//    SD-DO     |P5.2         P2.5|
//    SD-CLK    |P5.3         P2.4|
//              |P5.4         P2.3|
//                            P2.2| FKA Steuerung RS- (4)
//              |             P2.1| FKA Steuerung R/W-(5)
//              |             P2.0| FKA Steuerung E   (6)
//              |P5.5
//              |P5.6         P6.7|
//              |P5.7         P6.6|
//                            P6.5|
//                            P6.4|
//******************************************************************************



#include <msp430.h>
#include <stdio.h>  //für sprintf
#include <limits.h>
#include "TS_5435-LC7981.h"

void text_init(void);        // Initialisiert FKA
void programmversion(void);  // Programmversion anzeigen
void TimerA_einstellen(void);
unsigned int zahl;
unsigned int zahla;          //soll 16bit sein 0-65535 ???



int main(void)
   {

    WDTCTL = WDTPW + WDTHOLD;    // Stop watchdog timer

    P1DIR |= 0xFF;         //FKA Daten
    P2DIR  = 0x07;				 //FKA Steuersignal
    text_init();           // Initialisiert FKA als Textanzeige
    programmversion();
    P7DIR |= 0xc0;         // für LED   P7.7=LED rot, 7.6=LED gelb
    P7OUT |= BIT6;
    P7OUT &= ~BIT6;
    P7OUT |= BIT7;
    TimerA_einstellen();
    for(;;);


   }


void programmversion(void)
  {
   zahla=32767;
   char vers[26],z,c;
   char zaa[6],z1a,c1a;
   lcd_write_command(LCD_CMD_CURSOR_LA,0);         //0 Zeilenanfang 1.Zeile --> 26 Zeichen pro Zeile
   lcd_write_command(LCD_CMD_CURSOR_HA,0);
   sprintf(vers,"%s","0050-CCS-TS5435");           // Programmversion anzeigen
    for (z=0; z<26;z++)
   {
   c=vers[z];
   lcd_write_command(LCD_CMD_WRITE_DATA, c);
   }
      lcd_write_command(LCD_CMD_CURSOR_LA,92);    //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile
      lcd_write_command(LCD_CMD_CURSOR_HA,0);

      sprintf(zaa,"%d",zahla);
      for (z1a=0; z1a<6;z1a++)
      {
      c1a=zaa[z1a];
      lcd_write_command(LCD_CMD_WRITE_DATA,c1a);
      }
   }

void TimerA_einstellen(void)
{
 unsigned char  Zeit_A,ZeitOB_A=0x00,ZeitUB_A=0xFF;

     TA1CTL = TASSEL0 + TACLR;// + ID_3;    // TASSEL0 = Takteingang für ACLK(32kHz), TACLR--löscht Timer Vorteiler = 2
     TA1CTL |= MC0;           // Timer zählt bis CCRO
     TA1CCTL0 = CCIE;         // Interruptfreigabe
     Zeit_A =(ZeitOB_A << 8)|ZeitUB_A; // Zusammensetzen OB und UB
     TA1CCR0 =Zeit_A;           // Taktzeit:
     _EINT();                   // allg. Interrupt-Freigabe
}
#pragma vector=TIMER1_A0_VECTOR
__interrupt void TIMER1_A0_ISR(void)
   {
   char z1;
   char c1,za[6];

        P7OUT ^= 0x40;                 // Toggle P7.6
        P7OUT ^= 0x80;
  
        zahl=zahl+1;
        lcd_write_command(LCD_CMD_CURSOR_LA,78);    //26 Zeilenanfang 2.Zeile --> 26 Zeichen pro Zeile
        lcd_write_command(LCD_CMD_CURSOR_HA,0);

        sprintf(za,"%d",zahl);
        for (z1=0; z1<6;z1++)
        {
        c1=za[z1];
        lcd_write_command(LCD_CMD_WRITE_DATA,c1);
        }
   }

