📄 u_init.c
字号:
/******************************************************************************
* File name : init.c
* Module name : initial module
* Author : Hiromichi.Kondo
*-----------------------------------------------------------------------------
* $Id: Init.c,v 1.2 2003/05/14 01:26:10 9551619 Exp $
*****************************************************************************/
#define GLBREAL
/*--- Include ---------------------------------------------------------------*/
#include "u_value.h"
#include "u_c33cpu.h"
#include "u_regNikka.h"
#include "u_com_fp.h"
#include "u_usb_fp.h"
#include "u_macro.h"
#include "u_ram_data.h"
#include "u_rom_data.h"
/*--- Function Prototype ---------------------------------------
------------*/
void USBD_Init(void);
static void InitCPU(void);
static void InitUTimer(void ); // setting timer for USB use
/*--- External Function Prototype ------------------------------------------*/
extern void PowerOnProc_i(void);
/* Global Variable */
volatile struct c_IOtag * plc_IO ;
/*****************************************************************************
*
* : USBD_Init
* :
* :
* :
*
*****************************************************************************/
void USBD_Init(void)
{
extern int vbus_on_1st ; // VBUS
plc_IO = (struct c_IOtag *)0x40000; // append Endo
InitCPU(); /* Initialization of C33 */
PowerOnProc_i(); /* PowerOn Process */
vbus_on_1st = 0; //
MonTMStart(); // IFD timer (5ms) start
}
/*****************************************************************************
*
* : C33 CPU
* :
* :
* :
*
*****************************************************************************/
static void InitCPU(void)
{
// 1. setting usb clock
#ifdef L05DMT
*(volatile unsigned char* )0x300f35 &= 0x7f; //sbcuclk enable
*(volatile unsigned char* )0x300f2f = 0x96; //Misc Reg write protect
*(volatile unsigned char* )0x300f20 = 0x17; //OSC3 as USB clk,7 Wait cycle
//snooze disable
#endif
#ifdef L04DMT
*(volatile unsigned char* )0x300f20 |= 0x10; //usb clk enable
#endif
// 2. USB-int[ P56 ] PortInt(FPT14) setting
// this intrrupt controled itron.
// LEVEL < 4
pINT_PP1415L = 0x06 ; // interrupt level
pINT_FP815 = 0xFF ; // interrupt request flag clear
pINT_EP815 = ( 0x40 | pINT_EP815 ); // FPT14 interrupt enable
// 3. setting timer for USB use (USB_MON,USB_WAIT)
InitUTimer();
// 4. setting DMA trig port K54:Port use.
bK5_CFK5_CFK54 = 0 ; /* K54 function selection not DMAREQ3 */
// 5. setting HsDMA ch.3 Transfer End Interrupt
// CFEX7 P07 port extended function extension register
bPF_CFEX_CFEX7 = 0 ; // 1:#DMAEND3 select ; 0:port07 select //modified 04/03/12
// High-speed DMA Ch.3 interrupt priority
// #define bINT_PHSD23L_PHSD3L fINT_PHSD23L.PHSD3L
bINT_PHSD23L_PHSD3L = 7 ; // Intr LEVEL:7
// High-speed DMA Ch.3 interrupt enable register
// #define bINT_EDMA_EHDM3 fINT_EDMA.EHDM3
bINT_EDMA_EHDM3 = 0 ; // disable
// High-speed DMA Ch.3 interrupt request flag register
// #define bINT_FDMA_FHDM3 fINT_FDMA.FHDM3
bINT_FDMA_FHDM3 = 1 ; // clear
}
/************************************************************************
* InitUTimer
* Type : void
* Ret val : None
* Argument : void
* Function : Initialize Timer
************************************************************************/
void InitUTimer( void )
{
//----------------------------------------------------------
// 8 bit timer ch.3 setting
// usage for wait count timer
// this intrrupt dont control itron.
// LEVEL > 4
/* 8Bit Timer 3 */
*(volatile unsigned char*)REG_TM8_3_CTL = 0; /* 8-bit timer 3 stop */
*(volatile unsigned char*)REG_TM8_3_PSC &= 0x7f; /* 8-bit timer 3 pre off */
*(volatile unsigned char*)REG_TM8_3_PSC |= 0x70; /* 8-bit timer 3 pre 1/256 */
*(volatile unsigned char*)REG_TM8_3_PSC |= 0x80; /* 8-bit timer 3 pre on */
*(volatile unsigned char*)REG_TM8_3_LDAT = TM8_3_VALUE;
*(volatile unsigned char*)REG_TM8_3_CTL |= 0x02; /* 8-bit timer 3 reload */
*(volatile unsigned char*)REG_TM8_3_ILEVL &= 0xf0; /* 8-bit timer 3 int level4 */
*(volatile unsigned char*)REG_TM8_3_ILEVL |= 0x04;
*(volatile unsigned char*)REG_TM8_3_IFLAG |= 0x08; /* 8-bit timer 3 clr intflg */
*(volatile unsigned char*)REG_TM8_3_IMASK |= 0x08; /* 8-bit timer 3 int enable */
//----------------------------------------------------------
// 8 bit timer ch.4 setting
// usage for USB monitor timer wakeup every 5ms.
// this intrrupt controled itron.
// LEVEL < 4
// modified from 16timer1 to 8timer4 david.ji
/* 8Bit Timer 4 */
*(volatile unsigned char*)REG_TM8_4_CTL = 0; /* 8-bit timer 4 stop */
*(volatile unsigned char*)REG_TM8_4_PSC &= 0xf7; /* 8-bit timer 4 pre off */
*(volatile unsigned char*)REG_TM8_4_PSC |= 0x06; /* 8-bit timer 4 pre 1/2048 */
*(volatile unsigned char*)REG_TM8_4_PSC |= 0x08; /* 8-bit timer 4 pre on */
*(volatile unsigned char*)REG_TM8_4_LDAT = TM8_4_VALUE;
*(volatile unsigned char*)REG_TM8_4_CTL |= 0x02; /* 8-bit timer 4 reload */
// *(volatile unsigned char*)REG_TM8_4_ILEVL &= 0xf0; /* 8-bit timer 4 int level4 */
// *(volatile unsigned char*)REG_TM8_4_ILEVL |= 0x04;
*(volatile unsigned char*)REG_TM8_4_IFLAG |= 0x01; /* 8-bit timer 4 clr intflg */
*(volatile unsigned char*)REG_TM8_4_IMASK |= 0x01; /* 8-bit timer 4 int enable */
// *(volatile unsigned char*)REG_TM8_4_CTL |= 0x1; /* 8-bit timer 4 run */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -