main() { int i,n,m; init_IPIC(); ip = (IP_STEPPER*)IPABase; init_stepper(); init_encoder(); // ip->AxisCtrl1.Polarity = 0; ip->AxisCtrl1.Source = 0; ip->SyncCtrl = 0; ip->intVector = 0xF0; //programmer timer MCchip : une it toutes les TICK mili secondes StoreByte(MCchip_Base + General_Control_R, 0x2); /* MIEN */ StoreByte(MCchip_Base+Timer1_Control_R, 3); /* CEN COC */ StoreLong(MCchip_Base+Timer1_Compare_R, TICK*1000); StoreByte(MCchip_Base+Timer1_Interrupt_R, 0x11); /* IEN IL=1 */ SetHandler(((IVBR+Timer1_IRQ)*4 + VBR), it_timer ); sti(); //start ip->Motor1.csr = START_STOP_CMD | START_MOTION | FH1_SPEED | RAMP_UP_SPEED; while(1) stop(); }
main() { char s[20]; /////////////////////////////////////////// ////INITIALISATION DE LA CARTE ////////////////////////////////////////// /* * configurer le MCchip */ n_htos(0xFFFFFFFF,s); print (s); StoreByte(MCchip_Base + General_Control_R, 0x2); /* MIEN */ StoreByte(MCchip_Base + SCC_Interrupt_R, 0x12); /* IEN it z85230 niveau 2 */ /* * le numero du vecteur d'it du timer * est (InterruptVectorBaseR) + Timer1_IRQ * son adresse est 4 fois plus loin * on garde IVBR (MCchip) de 162Bug */ #define IVBR 80 StoreByte(MCchip_Base+Interrupt_Vector_Base_R, IVBR); SetHandler(((IVBR+Timer1_IRQ)*4 + VBR), schedule ); //programmer timer MCchip StoreByte(MCchip_Base+Timer1_Control_R, 3); /*CEN COC*/ /* une it toutes les TICK mili secondes */ StoreLong(MCchip_Base+Timer1_Compare_R, TICK*1000); StoreByte(MCchip_Base+Timer1_Interrupt_R, 0x11); /*IEN IL=1*/ //////////////////////////////////////////// //// INITIALISATION POUR LE NOYAU /////////////////////////////////////////// print("init hard ok"); init_mode_S(); //init en mode S //démasquer les it //sti(); // GO ! //démarrer les process utilisateurs. Ils n'accèdent aux primitives noyau que par trap //ils sont compilés avec une édition de liens indépendante de celle du noyau //lance un shell de debug. Il peut accéder aux structures de données internes du noyau //init(); //asm("jsr ___init"); //init en mode U //idle while (1) { //halt(); //pour libérer le bus } }
void ClearScreen(void){ address_type base_addr = MEMORY_DISP_ADDR; size_t total_size = MAX_Y * csbiInfo.dwSize.X; for(size_t i = 0; i < total_size; i++){ StoreByte(0, base_addr + i); } }
void IOKey(void *argv){ reg_type receiver_control = LoadWord(RECEIVER_CONTROL); SetBit(&receiver_control, IO_INTERRUPT_ENABLE); while(!prog_finished && (WaitForSingleObject(hRunMutex, 75L) == WAIT_TIMEOUT)){ if(kbhit()){ char ch = getch(); /* for(size_t i = 0 ; i < 1000; i++) printf("Inside if kbhit() ch = %c\n", ch);*/ StoreByte(ch, RECEIVER_DATA); //muxtex in StoreByte function if(bitState(cpo_reg[STATUS], INTERRUPT_ENABLE) && bitState(cpo_reg[STATUS], EXCEPTION_LEVEL) && bitState(receiver_control, IO_INTERRUPT_ENABLE)){ SetCause(INTERRUPT); SetBit(&cpo_reg[CAUSE], 0XD);//set pending bit /*need to rectify perhaps*/ SetBit(&receiver_control, IO_READY); StoreWord(receiver_control, RECEIVER_CONTROL); /* for(size_t i = 0 ; i < 1000; i++) printf("Inside inside of kbhit() set state cause: %X\n", cpo_reg[CAUSE]);*/ }//end of if }//end of if kbhit ReleaseMutex(hRunMutex);//unlock }//end of while prog_finished }