00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
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;
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);
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);
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();
00115 #if 0
00116 printf("\n\rInit().2");
00117 #endif
00118 if (I2C_Initialize() !=0)
00119 return 0xFFFF;
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()");
00129 T0_MR0+=10;
00130 WD_Reset();
00131 return 0xFFFF;
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);
00141 #else
00142 SetStatus(uiStatus);
00143 #endif
00144 WD_Reset();
00145 }
00146
00147 WD_Reset();
00148 uiStatus = CansInit(uiStatus);
00149 WD_Reset();
00150
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();}
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();}
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();}
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();}
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();}
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();}
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();}
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();}
00192
00193 WD_Reset();
00194 Timer0RegSet();
00195 WD_Reset();
00196 SCB_PCONP |= ((1 << 1) | (1 << 2));
00197 T0_IR |= (1 << 0);
00198 T0_PR = ((2700/2)+150);
00199 T0_MR0 = 100;
00200 T0_MCR = ((1 << 0)|(1 << 1));
00201 WD_Reset();
00202 #if 0
00203 printf("\n\rinit:SetStatus(0x%x)=0x%x",uiStatus,SetStatus(uiStatus));
00204 #else
00205 SetStatus(uiStatus);
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;
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;
00231
00232 CAN2_MOD = 0x00000001;
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;
00238
00239 CAN4_MOD = 0x00000001;
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;
00245 }
00246
00247 void SetMyPLL(void){
00248 #if 1
00249 SCB_PLLCFG = 0x00000021;
00250 SCB_PLLCON = (1 << PLLE);
00251 SCB_PLLFEED = 0x000000AA;
00252 SCB_PLLFEED = 0x00000055;
00253 while((SCB_PLLSTAT & (1 << PLOCK)));
00254 SCB_PLLCON |= (1 << PLLE);
00255 SCB_PLLFEED = 0x000000AA;
00256 SCB_PLLFEED = 0x00000055;
00257 SCB_VPBDIV = 0x00000002;
00258 #else
00259 SCB_VPBDIV = 0x02;
00260 SCB_PLLCON |= 0x02;
00261
00262 SCB_PLLCFG = 0x21;
00263
00264 SCB_PLLFEED = 0xAA;
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;
00273 int i;
00274 SetMyPLL();
00275 UARTInitialize();
00276 PCB_PINSEL2 &= 0x7;GPIO1_IODIR |= (1 << 18);GPIO1_IOSET |= (1 << 18);
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)
00305 {printf("\n\rFRAM sytem Error");return;}
00306 #if 1
00307 printf("\n\r'b':%s",RamtronWriteString(1,VER));
00308 #else
00309 RamtronWriteString(1,VER);
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;
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);
00338 WD_Init(WD_TIME);
00339 uiStatus = Init(uiStatus);
00340 enableIRQ();
00341
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);
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 }