/*********************************************************************************
Module# (init.c)+13,16
Title: イニシャライズモジュール
File : INIT.C Ver.1.0 written on Jan.19.1996 by M.M.
**********************************************************************************/
#include "m9401.h"
#define PG_DUM 5
extern float Ers_v,Ers_th;
extern float Xc,Yc;
extern float V,Th,Om;
extern int Z_ref;
extern float Z;
extern float Th0;
extern int flag;
extern int Seg[];
extern int Led1;
extern int Led2;
extern unsigned char outportu();/* */
extern int inportb();/* */
extern int outportb();/* */
extern int disp();
extern int Act;
void rtc_clr();
int init()
{
int ch,i;
rtc_clr();
/* MMI PIT0 */
outportb(PGCR0 ,0x00); /* clear PGCR0 */
outportb(PADDR0,0xff); /* all output */
outportb(PBDDR0,0x10); /* RRRWRRRR */
outportb(PACR0 ,0x80);
outportb(PBCR0 ,0x80);
outportb(PGCR0 ,0x02); /* mode 0 */
outportb(TCR0,0x00); /* clear TCR0 */
outportb(CPRH0,0x00);
outportb(CPRM0,0x00);
outportb(CPRL0,0x3f); /* TOUT 2kHz */
outportb(TCR0,0x41); /* square wave */
/* PWM PIT1 */
outportb(PGCR1 ,0x00); /* clear PGCR1 */
outportb(PADDR1,0xff); /* all output */
outportb(PBDDR1,0xff); /* all output */
outportb(PACR1 ,0x80); /* submode 1x */
outportb(PBCR1 ,0x80); /* submode 1x */
outportb(PGCR1 ,0x00); /* mode0 & H1,H2,H3,H4 disable*/
outportb(TCR1 ,0x00);
outportb(CPRH1 ,0x00);
outportb(CPRM1 ,0x00);
outportb(CPRL1 ,0x01); /* Toutの出力は125[kHz] */
outportb(TCR1 ,0x41); /* square wave */
/* SSS & PHOTO PIT2 */
outportb(PGCR2 ,0x00); /* clear PGCR2 */
outportb(PSRR2, 0x1c);
outportb(PACR2 ,0x20);
outportb(PADDR2,0x03);
outportb(PBCR2, 0xA0);
outportb(PBDDR2,0x00);
outportb(PGCR2 ,0x18); /*mode0 & H3,H4 disable*/
outportb(TCR2 ,0x00);
outportb(CPRH2 ,0x00);
outportb(CPRM2 ,0x14);
outportb(CPRL2 ,0x4c); /* アンダーフローまで 16[msec] としている */
outportb(TCR2 ,0xba);
outportb(TIVR2,72+0); /* sss interrupt causes by tout*/
outportb(MSR,0x0c);
inportb(0xfdfe07);
outportb(MSR,0x4c);
outportb(RTMR,0x08);
outportb(PFIC,0x10);
outportb(MSR,0x0c);
/* RE/TS */
outportb(TSIE,0x00); /* Touch Sensor Interrupt Enable */
outportb(CRST,0x03); /* counter reset */
outportb(TCR2 ,0xbb);
/* outportb(RTMR ,0x08);*/
outportu(PADR1,0);
outportu(PBDR1,0);
/* Dummy Read of Encoders */
outportb(CRST,0x03);
for (ch=0;ch< PG_DUM;ch++)
{
inportb(EDRH);
inportb(EDRL);
inportb(EDLH);
inportb(EDLL);
}
outportb(CRST,0x03);
/* Initial State */
V = Om = 0.;
Th = Th0 = PIH;
Xc = X0;
Yc = Y0;
Z = 0;
Z_ref=0;
for(i=0;i<=4;i++)
Seg[i]=10;
Led1=0;
Led2=0;
disp();
Ers_th = Ers_v = 0.; /* 目標値との偏差の累積 */
flag=ON;
Act=0;
return(ON);
}
void rtc_clr()
{
int rtc_base;
int i;
rtc_base=0xfdfe00;
outportb(MSR,0x44);
for ( i=3 ; rtc_base+ i<0xfdfe40 ; i+=2 ) outportb(rtc_base+i,0x00);
outportb(MSR,0x04);
for ( i=3 ; rtc_base+ i<0xfdfe0a ; i+=2 ) outportb(rtc_base+i,0x00);
}