projekty/Source/example1/src/ex1.c

Go to the documentation of this file.
00001 /*
00002  * $Id: ex1.c,v 1 2004/11/01 17:00:00 BorisK Exp $
00003  *
00004  * Copyright (C) 2004 ONTRACK s.r.o.
00005  *
00006  * This program is free software; you can redichStribute it and/or
00007  * modify it under the terms of the GNU General Public License
00008  * as published by the Free Software Foundation; either version 2
00009  * of the License, or (at your option) any later version.
00010  *
00011  * This program is dichStributed in the hope that it will be useful,
00012  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  * GNU General Public License for more details.
00015  *
00016  * You should have received a copy of the GNU General Public License
00017  * along with this program; if not, write to the Free Software
00018  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA    
00019  * 02111-1307, USA.
00020  *
00021  * [1] ARM-based Microcontroller LPC2119/2129/2194/2292/9994, "Preliminary User Manual", February 03, 2004
00022  *
00023  * Written by Boris Kralik <kralikbo@yahoo.com>, 2004.
00024  *
00025  */
00026 
00027 #include "ex1.h"
00028 
00029 void CAN1_Rx_IntRoutine()
00030 {
00031 }
00032 void CAN1_Tx_IntRoutine()
00033 {
00034 }
00035 void ErrorOnCAN()
00036 {
00037 }
00038 void TIMER_Int(void)
00039 {
00040 }
00041 void LUT_interrupt()
00042 {
00043 }
00044 
00045 
00046 void Sheduler(void)
00047 {
00048         int i,T=-50,T1=-540;
00049         uint16_t        status=0;
00050         for(i=0;i<8;i++)
00051         {
00052                 if((T1=AD7414_5Read(i)) > T) 
00053                         if (T1 != 255) T=T1;
00054         }
00055 
00056         if ((((status = GetStatus()) & 0x07) == 7) && (iAddress != 0))
00057         { 
00058                 #if 0
00059                         printf("\n\r\tCAN OK");
00060                 #endif
00061                 SendToCAN1(iAddress,T,0,0,0,0,0);
00062                 SendToCAN2(iAddress,T,0,0,0,0,0);
00063                 SendToCAN4(iAddress,T,0,0,0,0,0);
00064         }else
00065         {
00066                 #if 1
00067                         printf("\n\rCans is off, status=0x%x,iAddress=0x%x",(status & 0x07),iAddress);
00068                 #else
00069                         printf("\n\r\tCann't start seduler(status=0x%x,iAddress=0x%x)",(status && 0x07),iAddress);
00070                         StopTimer0();
00071                         T0_TCR  &=      0xFE;   //Stop TIMER0
00072                 #endif
00073         }
00074 }
00075 int iStaff;
00076 void TIMER0_Int(){
00077         Sheduler();
00078         switch((iStaff = ~iStaff))
00079         {
00080                 case 0:GPIO1_IOSET      |=      (1 << 18);
00081                         #if 0
00082                                 printf("\n\rT0 - 0");
00083                         #endif
00084                         WD_Reset();
00085                         GPIO1_IOSET     |=      (1 << 27);      //TDO
00086 
00087                         break;
00088                 default:GPIO1_IOCLR     |=      (1 << 18);
00089                         #if 0
00090                                 printf("\n\rT0 - 1");
00091                         #endif
00092                         WD_Reset();
00093                         GPIO1_IOCLR     |=      (1 << 27);      //TDO
00094                         break;
00095         
00096         }
00097         WD_Reset();
00098         #if 0
00099                 printf("\n\rTIMER0_Int");
00100         #endif
00101 }
00102 void TIMER1_Int(){
00103 #if 1
00104         printf("\n\rTIMER1_Int");
00105 #endif
00106 }
00107 
00108 uint16_t Init(uint16_t  uiStatus)
00109 {
00110         short ret=0;
00111         #if 0
00112                 printf("\n\rInit().1");
00113         #endif
00114         INT_Initialize();       //Interrupt.c
00115         #if 0
00116                 printf("\n\rInit().2");
00117         #endif
00118         if (I2C_Initialize() !=0)
00119                 return 0xFFFF;  //Ak nechodi I2C, tak je skoro vsetko v pytli :-)
00120         #if 0
00121                 printf("\n\rInit().3");
00122         #endif
00123         WD_Reset();
00124         #if 0
00125                 printf("\n\rInit().4");
00126         #endif
00127         if ((ret=RamtronInit()) !=0 ){
00128                         printf("\n\rError RamtromInit()");//=0x%x",ret);
00129                         T0_MR0+=10;
00130                         WD_Reset();
00131                         return 0xFFFF;  //Aj Framka je dolezita
00132                 }else   {
00133                 #if 0
00134                         printf("\n\rInit().5");
00135                 #endif
00136                 WD_Reset();
00137                 uiStatus        |=      (1 << STATUS_RAMTRON);I2C_SetSTO();
00138                 #if 0
00139                         WD_Reset();
00140                         printf("\n\rInit:SetStatus(0x%x)=0x",uiStatus);//,SetStatus(uiStatus));
00141                 #else
00142                         SetStatus(uiStatus);    //Napis, ze FRAM je OK
00143                 #endif
00144                 WD_Reset();
00145                 }//Fram OK a napis to na Adresu MEM_STATUS_H:MEM_STATUS_L v FRAM
00146         //********* CAN **************
00147         WD_Reset();
00148         uiStatus = CansInit(uiStatus);
00149         WD_Reset();
00150         //********** I2C ***************
00151 
00152         if ((ret = SendSlaveAdress(I2C_AD7414_0_W_VDD))!=0){
00153                         printf("\n\r1-Error initialize I2C_AD7414_0_W_VDD !!!");
00154                         I2C_SetSTO();T0_MR0+=10;
00155                 }else   {uiStatus |= (1 << STATUS_AD7414_0_WDD);I2C_SetSTO();}  //OK
00156         WD_Reset();
00157         if ((ret = SendSlaveAdress(I2C_AD5382_W))!=0){
00158                         printf("\n\r2-Error initialize AD5382 !!!");
00159                         I2C_SetSTO();
00160                         T0_MR0+=10;
00161                 }else   {uiStatus |= (1 << STATUS_AD5382);I2C_SetSTO();} //OK
00162         WD_Reset();
00163         if ((ret = SendSlaveAdress(MAX1039_W))!=0){
00164                         printf("\n\r3-Error_initialize MAX1039_W !!!");
00165                         T0_MR0+=10;
00166                 }else   {uiStatus |= (1 << STATUS_MAX1039);I2C_SetSTO();}       //OK
00167         WD_Reset();
00168         if ((ret = SendSlaveAdress(I2C_AD5391_W))!=0){
00169                         printf("\n\r5-Error initialize I2C_AD5391 !!!");
00170                         T0_MR0+=10;
00171                 }else   {uiStatus |= (1 << STATUS_AD5391);I2C_SetSTO();}        //OK
00172         WD_Reset();
00173         if ((ret = SendSlaveAdress(I2C_AD7997BRU_1_H_W))!=0){
00174                         printf("\n\r6-Error initialize I2C_AD7997BRU_1_H !!!");
00175                         T0_MR0+=10;
00176                 }else   {uiStatus |= (1 << STATUS_AD7997BRU_1_H);I2C_SetSTO();} //OK
00177         WD_Reset();
00178         if ((ret = SendSlaveAdress(I2C_AD7997BRU_1_L_W))!=0){
00179                         printf("\n\r7-Error initialize I2C_AD7997BRU_1_L !!!");
00180                         T0_MR0+=10;
00181                 }else   {uiStatus |= (1 << STATUS_AD7997BRU_1_L);I2C_SetSTO();} //OK
00182         WD_Reset();
00183         if ((ret = SendSlaveAdress(MAX_7300AAI_W))!=0){
00184                         printf("\n\r8-Error initialize MAX_7300AAI_W !!!");
00185                         T0_MR0+=10;
00186                 }else   {uiStatus |= (1 << STATUS_MAX_7300AAI);I2C_SetSTO();}   //OK
00187         WD_Reset();
00188         if ((ret = SendSlaveAdress(MAX_7300AAI_1_W))!=0){
00189                         printf("\n\r9-Error initialize MAX_7300AAI_1_W !!!");
00190                         T0_MR0+=10;
00191                 }else   {uiStatus |= (1 << STATUS_MAX_7300AAI_1);I2C_SetSTO();} //OK
00192         //********** TIMER *************
00193         WD_Reset();
00194         Timer0RegSet();
00195         WD_Reset();
00196         SCB_PCONP       |=      ((1 << 1) | (1 << 2));
00197         T0_IR   |=      (1 << 0);               //Intrerrupt flag for match 0 channel
00198         T0_PR   =       ((2700/2)+150);         //Tvz=0.045ms=45us Tpclk=83.3ns=0.083ns n=540)
00199         T0_MR0  =       100;
00200         T0_MCR  =       ((1 << 0)|(1 << 1));    //When TC==MR0 interrupt is generated and TC reset
00201         WD_Reset();
00202         #if 0
00203                 printf("\n\rinit:SetStatus(0x%x)=0x%x",uiStatus,SetStatus(uiStatus));
00204         #else
00205                 SetStatus(uiStatus);            //Zapis vysledky statusu do Fram
00206         #endif
00207         return uiStatus;
00208 }
00209 uint16_t CansInit(uint16_t uiStatus)
00210 {
00211         WD_Reset();
00212         CAN_Init(uiStatus);
00213         WD_Reset();
00214         CAN1_Init();
00215         WD_Reset();
00216         CAN2_Init();
00217         WD_Reset();
00218         CAN4_Init();
00219         WD_Reset();
00220         return uiStatus;
00221 }
00222 
00223 void CanRead()
00224 {
00225         CAN1_MOD        =       0x00000001;     //Set CAN controller into reset
00226         printf("\n\r-----------------------");
00227         printf("\n\rCAN1_RID:%d",CAN1_RID);
00228         printf("\n\rCAN1_RDA:%d",CAN1_RDA);
00229         printf("\n\rCAN1_RDB:%d",CAN1_RDB);
00230         CAN1_MOD        =       0x00000001;     //Release CAN controller
00231 
00232         CAN2_MOD        =       0x00000001;     //Set CAN controller into reset
00233         printf("\n\r-----------------------");
00234         printf("\n\rCAN2_RID:%d",CAN2_RID);
00235         printf("\n\rCAN2_RDA:%d",CAN2_RDA);
00236         printf("\n\rCAN2_RDB:%d",CAN2_RDB);
00237         CAN2_MOD        =       0x00000001;     //Release CAN controller
00238 
00239         CAN4_MOD        =       0x00000001;     //Set CAN controller into reset
00240         printf("\n\r-----------------------");
00241         printf("\n\rCAN4_RID:%d",CAN4_RID);
00242         printf("\n\rCAN4_RDA:%d",CAN4_RDA);
00243         printf("\n\rCAN4_RDB:%d",CAN4_RDB);
00244         CAN4_MOD        =       0x00000001;     //Release CAN controller
00245 }
00246 
00247 void     SetMyPLL(void){
00248 #if 1
00249         SCB_PLLCFG      =       0x00000021;     // P=2,M=2
00250         SCB_PLLCON      =       (1 << PLLE);    // Enable PLL
00251         SCB_PLLFEED     =       0x000000AA;
00252         SCB_PLLFEED     =       0x00000055;
00253         while((SCB_PLLSTAT &   (1 << PLOCK)));//Test Lock bit
00254         SCB_PLLCON      |=      (1 << PLLE);//Connect to PLL
00255         SCB_PLLFEED     =       0x000000AA;
00256         SCB_PLLFEED     =       0x00000055;
00257         SCB_VPBDIV      =       0x00000002;     // VIDIV = 2;
00258 #else
00259         SCB_VPBDIV      =       0x02;           // 19200Baud                  
00260         SCB_PLLCON      |=      0x02;           // PLLE = 1, PLLC = 1 turn on PLL
00261         
00262         SCB_PLLCFG      =       0x21;           // 10 00000  <> M=2 P=2
00263         
00264         SCB_PLLFEED     =       0xAA;           // PLL Valid sequence
00265         SCB_PLLFEED     =       0x55;
00266 #endif
00267 }
00268 int main(void)
00269 {
00270         char str[2]={'f',0};
00271         uint8_t temp=-1;
00272         uint16_t        uiStatus=0x0000;        //See status.h
00273         int i;
00274         SetMyPLL();
00275         UARTInitialize();
00276         PCB_PINSEL2     &=      0x7;GPIO1_IODIR |=      (1 << 18);GPIO1_IOSET   |=      (1 << 18);//LED
00277         DelayMS(10);WD_Reset();GPIO1_IOCLR      |=      (1 << 18);DelayMS(10);
00278 
00279         WD_Reset();
00280         uiStatus=Init(uiStatus);
00281         printf("\n\rmain");
00282         #if 1
00283                 printf("\n\rVer.%s,uiStatus.z FRAM=0x%x",VER,GetStatus());WD_Reset();
00284         #endif
00285         do{
00286                 WD_Reset();
00287                 switch (str[0])
00288                 {
00289                         case 'f':
00290                         case 'F':
00291                                 if (((jedec = detect_jedec()).sManufacturer) != 0x89)
00292                                         {printf("\n\rDevice is not INTEL!!! [%d]",jedec.sManufacturer);
00293                                                 DelayMS(10);WD_Reset();GPIO1_IOCLR      |=      (1 << 18);break;}
00294                                                 else {printf("\n\rJDEC: Manufacturer:0x%x Device:0x%x",jedec.sManufacturer,jedec.sDevice);
00295                                                         DelayMS(10);WD_Reset();GPIO1_IOSET      |=      (1 << 18);}
00296                                 if ( ((cfi = detect_cfi()).sQ != 'Q') || (cfi.sR != 'R') || (cfi.sY != 'Y'))
00297                                         {printf("\n\rMemory is NOT CFI compatibile ! [%d %d %d]",cfi.sQ,cfi.sR,cfi.sY);
00298                                                 DelayMS(10);WD_Reset();GPIO1_IOCLR      |=      (1 << 18);break;}
00299                                                 else {printf("\n\rMemory is CFI compatibile !");
00300                                                         DelayMS(10);WD_Reset();GPIO1_IOSET      |=      (1 << 18);}
00301                                 break;
00302                         case 'b':
00303                         case 'B':
00304                                 if (RamtronWriteString(0,"1\x0") == NULL)       //Computer 1    
00305                                         {printf("\n\rFRAM sytem Error");return;}
00306                                 #if 1
00307                                         printf("\n\r'b':%s",RamtronWriteString(1,VER));//       'Version'.'Subversion'
00308                                 #else
00309                                         RamtronWriteString(1,VER);//    'Version'.'Subversion'
00310                                 #endif
00311                                 WD_Reset();
00312                                 break;
00313                         case 'o':
00314                         case 'O':
00315                                 GPIO1_IOCLR     |=      (1 << 18);
00316                                 uiStatus = CAN_Off(uiStatus);
00317                                 WD_Stop();
00318                                 T0_TCR  &=      0xFE;   //Stop TIMER0
00319                                 #if 1
00320                                         printf("\n\r\tOff");
00321                                 #endif
00322                                 WD_Reset();
00323                                 break;
00324                         case 'l':
00325                         case 'L':
00326                                 AD7997_Menu();
00327                                 WD_Reset();WD_Reset();
00328                                 break;
00329                         case 'a':
00330                         case 'A':
00331                                 AMenu();
00332                                 WD_Reset();
00333                                 break;
00334                         case 'i':
00335                         case 'I':
00336                                 uiStatus = 0;
00337                                 PCB_PINSEL2     &=      0x7;GPIO1_IODIR |=      (1 << 18);GPIO1_IOSET   |=      (1 << 18);      //LED
00338                                 WD_Init(WD_TIME);
00339                                 uiStatus = Init(uiStatus);
00340                                 enableIRQ();
00341                                 //T0_TCR        |=      (1 << 0);       //Start TIMER0
00342                                 #if 1
00343                                         printf("\n\rInit:0x%x",uiStatus);
00344                                 #endif
00345                                 WD_Reset();
00346                         case 't':
00347                         case 'T':
00348                                 T0_MR0  =       300;
00349                                 T0_TCR  |=      (1 << 0);       //Start TIMER0
00350                                 #if 1
00351                                         printf("\n\rStartTimer0");
00352                                 #endif
00353                                 WD_Reset();
00354                                 break;
00355                         case '+':
00356                                 T0_MR0  +=10;
00357                                 if (T0_MR0 > 3000) T0_MR0 = 300;
00358                                 WD_Reset();
00359                                 break;WD_Reset();
00360                         case '-':
00361                                 T0_MR0  -=10;
00362                                 if (T0_MR0 < 0) T0_MR0 = 300;
00363                                 WD_Reset();
00364                                 break;
00365                         case 's':
00366                         case 'S':
00367                                 StopTimer0();
00368                                 GPIO1_IOCLR     |=      (1 << 18);
00369                                 #if 1
00370                                         printf("\n\rStopTimer0");
00371                                 #endif
00372                                 WD_Reset();
00373                                 break;
00374                         case 'r':
00375                         case 'R':
00376                                 WD_Reset();
00377                                 CANMenu();
00378                                 WD_Reset();
00379                                 break;
00380                         case '0':
00381                                 printf("\n\rPrintf Temperature:");
00382                                 for(i = 0;i < 7;i++)
00383                                 {
00384                                         if ((temp=AD7414_5Read(i)) != -1)
00385                                                 printf("\n\r\t%d:%d [deg]",i,temp); 
00386                                 }
00387                                 WD_Reset();
00388                                 break;
00389                         case 'h':
00390                         case 'H':
00391                                 printf("\n\rHelp:%s",HELP);
00392                                 WD_Reset();
00393                                 break;
00394                         case 'm':
00395                         case 'M':
00396                                 RMenu();
00397                                 WD_Reset();
00398                                 break;
00399                         case 'd':
00400                         case 'D':
00401                                 DoMenu();
00402                                 WD_Reset();
00403                                 break;
00404                         default:
00405                                 #if 0
00406                                         printf("\n\rdefault:%c",str[0]);
00407                                 #endif
00408                                 WD_Reset();
00409                                 break;
00410                 }
00411                 WD_Reset();
00412                 if ((UART0_LSR & 0x01)==1)
00413                         {str[0]=(char) UARTgetchar(0);str[1]='\x0';WD_Reset();continue;}
00414                         else str[0]=0;
00415         }while(1);
00416         return 0;
00417 }

Generated on Fri Sep 21 13:41:54 2007 for example1 by  doxygen 1.4.7