]> rtime.felk.cvut.cz Git - can-usb1.git/blob - ulan/embedded/arch/mcs51/generic/libs/boot/boot.c
Initializing repo
[can-usb1.git] / ulan / embedded / arch / mcs51 / generic / libs / boot / boot.c
1 #include <system_def.h>
2 #include <ul_lib/ulan.h>
3 #include <keyval_id.h>
4 #include <ul_drv_fnc.h>
5 #include <uldy_base.h>
6 #include <local_config.h>
7 #ifdef CONFIG_MISC_VECT
8 #include <vect.h>
9 #endif
10
11 #define HZ_TIMER    100               //100Hz pro casovac
12
13 KVPB_BLOCK_LOC kvpb_block_t kvpb_block_global;
14 UL_DYAC_VAR_LOC ul_dyac_t ul_dyac_global;
15
16 volatile uchar timer_str,jump_timer;
17 uchar XDATA ustatus;
18
19 /****************************************************************************/
20 //definice casovace
21 void timer(void) 
22 {
23   if (!TF0) return;
24   TF0=0;
25   TH0=HZ2TMODE1H(HZ_TIMER);                     //nastav casovac0
26   TL0=HZ2TMODE1L(HZ_TIMER);      
27   if (timer_str!=0) {
28     timer_str=5;
29     ul_str();
30   } else timer_str--;
31   if (jump_timer) jump_timer--;
32 }
33
34 char ul_save_adr(uchar uaddr) UL_DYAC_REENTRANT
35 {
36   kvpb_set_key(&kvpb_store,KVPB_KEYID_ULAN_ADDR,1,&uaddr);
37   return 0;
38 }
39
40 char ul_save_sn(unsigned long usn) UL_DYAC_REENTRANT
41 {
42   kvpb_set_key(&kvpb_store,KVPB_KEYID_ULAN_SN,4,&usn);
43   return 0;
44 }
45
46 void setup_board(void)
47 {
48 }
49
50 void main(void) 
51 {
52  #ifndef UL_WITHOUT_HANDLE
53   kvpb_block_t *kvpb_block=&kvpb_block_global;
54   ul_dyac_t *ul_dyac=&ul_dyac_global;
55   ul_msginfo msginfo;
56  #endif  /*UL_WITHOUT_HANDLE*/
57   unsigned long usn=0L;
58   uchar uaddr=62;
59
60   ustatus=0;
61   LED_GP=0;
62
63   //********************
64   // timers
65   TMOD=0x21;                                    //citac0-16bitovy,1-8bitovy(reload)
66   TH0=HZ2TMODE1H(HZ_TIMER);                     //nastav casovac0
67   TL0=HZ2TMODE1L(HZ_TIMER);      
68   TCON=0x10;                                    //nul. priz. casov0,1;spust casov0
69 #ifdef CPU_X2_MODE
70   CKCON0=0x01;                                  //X2 mod for at89c51ed2
71 #endif
72 #ifdef __REG1210_H__
73   MCON|=1;                                      //XDATA memory map to 0x8400
74 #endif
75 #ifdef WATCHDOG_ENABLED
76   WATCHDOG_ON();
77   WATCHDOG_SET_MS(1000); //1s
78   WATCHDOG_REFRESH();
79 #endif
80
81   //********************
82   // keyval init
83   kvpb_block->base=(CODE uint8_t*)KVPB_BASE;
84   kvpb_block->size=KVPB_SIZE;
85   kvpb_block->flags=KVPB_DESC_DOUBLE;
86   if(kvpb_check(kvpb_block,1)<0) 
87     while(1);
88
89   kvpb_get_key(kvpb_block,KVPB_KEYID_ULAN_ADDR,1,&uaddr);
90   kvpb_get_key(kvpb_block,KVPB_KEYID_ULAN_SN,4,&usn);
91
92   //********************
93   // uLan init
94   ul_drv_set_adr(uaddr);
95   ul_drv_set_bdiv(BAUD2BAUDDIV(19200));
96   ul_drv_init();
97   ul_fd=ul_open(0,0);
98
99   /***********************************/
100   // uLan dyac init
101   uldy_init(ULDY_ARG_ul_dyac ULDY_ARG_ul_fd ul_save_sn,ul_save_adr,NULL,usn);
102   ul_drv_set_status(ustatus,sizeof(ustatus));
103
104   //********************
105   // start
106   jump_timer=200;
107
108   while ((jump_timer) || (ul_dyac->boot_activated)) {
109
110     /* serve interrupt rutine for uLan */
111     ul_int();
112
113     /* serve interrupt rutine for timer */
114     timer();
115
116     if((ul_inepoll(ul_fd)>0)||(ul_fd_wait(ul_fd,100)>0)){
117       uldy_process_msg(ULDY_ARG_ul_dyac NULL);
118     }
119
120     /* test request for address */
121     if (uldy_rqa(ULDY_ARG1_ul_dyac)) 
122       uldy_addr_rq(ULDY_ARG1_ul_dyac);
123
124   #ifdef WATCHDOG_ENABLED
125     WATCHDOG_REFRESH();
126   #endif
127
128   }
129   LED_GP=1;
130   vec_jmp(IADDR_ASTARTUP);  //application startup code
131 }