📄 massinit_zhdsh.c
字号:
//_AD1IP=4;//設置AD1中斷的優先級為4
//IFS0 &= ~AD1IF; //清除AD中斷標志 /* Clear the interrupt for timer 2 */
//IEC0 |= AD1IE; //打開AD中斷 /* Enable interrupts for timer 2 */
IEC0 &= ~AD1IE; //關閉AD中斷 /* Enable interrupts for timer 2 */
#ifdef SIM_DEBUG
_ADON=0;//啟動AD轉換
#else
_ADON=1;//啟動AD轉換
#endif
_DMA0IP=4;//設置DMA0中斷的優先級為4
//Clear the DMA0 Interrupt Flag
IFS0 &= ~DMA0IF; /* Clear the interrupt for timer 2 */
//Enable DMA0 Interrupts
IEC0 |= DMA0IE; /* Enable interrupts for timer 2 */
//Enable the DMA0 Channel
DMA0CONbits.CHEN = 1;
}
//看門狗配置
static void WDT_Init(void)
{
_SWDTEN=0;//禁止看門狗
}
//振蕩器配置
static void Osc_Init(void)
{
_FRCDIV=0x1;//FRC後分頻比
_PLLPRE=0;//對外部時鐘輸入Fin=11.0592MHz進行2預分頻,以產生0.8~8MHz時鐘5.5296MHz
_PLLDIV=0x1A;//對預分頻後0.8~8MHz時鐘進行28倍頻,以產生100~200MHz時鐘154.8288MHz
_PLLPOST=0;//對100~200MHz時鐘進行2分頻,以產生12.5~80MHz時鐘Fosc=77.4144Mhz, 器件指令时钟FCY = FOSC/2=38.7072MHz
}
//與車架板通訊口配置
void UART1_Init (INT32U baud_rate)
{
INT32U Fcy;
Fcy = BSP_CPU_ClkFrq(); /* Get the Fcy frequency which drives the UART */
U1BRG = (INT16U)((Fcy / (16 * baud_rate)) - 1); //251 /* Compute divisor for desired baud rate */
U1MODE = UART_EN; /* Enable the UART with the parameters 8N1 */
U1STA = UTXEN | UTXISEL; /* Enable the transmitter, configure the Tx and Rx */
/* interrupt modes, but do not enable interrupts */
/* Tx Interrupt Mode is set for Tx Shift Reg Empty */
/* Rx Interrupt Mode is set to Interrupt for each Rx */
IFS0 &= ~(U1TXIF | U1RXIF); /* Clear pending interrupts */
IPC3 &= ~U1TXIP_MASK; /* Clear the UART1 Tx priority bits */
IPC2 &= ~U1RXIP_MASK; /* Clear the UART1 Rx priority bits */
IPC3 |= (OSVIEW_INT_PRIO << 0); /* Configure the UART1 Tx interrupt priorities */
IPC2 |= (OSVIEW_INT_PRIO << 12); /* Configure the UART1 Rx interrupt priorities */
IEC0 |= U1RXIE; /* Enable Receive Interrupts */
IEC0 |= U1TXIE; /* Enable Tx interrupts */
}
//與PC機通訊口配置
void UART2_Init (INT32U baud_rate)
{
INT32U Fcy;
Fcy = BSP_CPU_ClkFrq(); /* Get the Fcy frequency which drives the UART */
U2BRG = (INT16U)((Fcy / (16 * baud_rate)) - 1); /* Compute divisor for desired baud rate */
U2MODE = UART_EN; /* Enable the UART with the parameters 8N1 */
U2STA = UTXEN | UTXISEL; /* Enable the transmitter, configure the Tx and Rx */
/* interrupt modes, but do not enable interrupts */
/* Tx Interrupt Mode is set for Tx Shift Reg Empty */
/* Rx Interrupt Mode is set to Interrupt for each Rx */
IFS1 &= ~(U2TXIF | U2RXIF); /* Clear pending interrupts */
IPC7 &= ~U2TXIP_MASK; /* Clear the UART2 Tx priority bits */
IPC7 &= ~U2RXIP_MASK; /* Clear the UART2 Rx priority bits */
IPC7 |= (OSVIEW_INT_PRIO << 8) | (OSVIEW_INT_PRIO << 12); /* Configure the UART2 Rx and Tx interrupt priorities */
IEC1 |= U2RXIE; /* Enable Receive Interrupts */
IEC1 |= U2TXIE; /* Enable Tx interrupts */
}
//周期檢測捕捉口配置
static void ICInt_Init(void)
{
//定时器配置
_T2IE=0;//禁止T3中斷
T2CON = 0x0000;//關閉定時器
T2CONbits.T32=0;//T2,T3作為16位模式
PR2 = 0xFFFF;
TMR2 = 0;
T2CON = 0x8030;//預分頻比256:1,啟動時基計數,中断周期为433.439ms
_T2IP=5;//提高T2优先级,保证IC捕获准确度
_T2IE=1;//使能T2中斷
//发生捕捉事件时捕捉TMR2的内容;每次捕捉事件中断一次;每个上升沿捕捉一次
IC1CON=0x0083;
IC2CON=0x0083;
IC3CON=0x0083;
IC4CON=0x0083;
//使能捕获中断
_IC1IF=0;
_IC2IF=0;
_IC3IF=0;
_IC4IF=0;
_IC1IE=1;
_IC2IE=1;
_IC3IE=1;
_IC4IE=1;
}
//馬達驅動PWM口配置
static void PWM_Init(void)
{
//時基配置
_T3IE=0;//禁止T3中斷
T3CON = 0x0000;//關閉定時器
T2CONbits.T32=0;//T2,T3作為16位模式
PR3 = PWM_PERIOD*BSP_CPU_ClkFrq()/1000000L-1;//3095(0x0C17)
TMR3 = 0;
//初始化占空比
OC1R = 0;//159;
OC1RS = 0;//799;//159;
OC2R = 0;//318;
OC2RS = 0;//799;//318;
OC3R = 0;//477;
OC3RS = 0;//799;//477;
OC4R = PR3*8/10;// 80%占空比
OC4RS = 2476;//
OC5R = 0;//636;
OC5RS = 0;//799;//636;
OC6R = 0;//795;
OC6RS = 0;//799;//795;
OC7R = 0;//954;
OC7RS = 0;//799;//954;
OC8R = 0;//1113;
OC8RS = 0;//799;//1113;
//選擇PWM模式,選擇Timer3為PWM時基
OC1CON = 0x000e;
OC2CON = 0x000e;
OC3CON = 0x000e;
OC4CON = 0x000e;//test080521
OC5CON = 0x000e;
OC6CON = 0x000e;
OC7CON = 0x000e;
OC8CON = 0x000e;
T3CON = 0x8000;//預分頻比1:1,啟動時基計數
_T3IP=5;//提高T3优先级,保证PWM缓变可靠
_T3IE=1;//使能T3中斷
}
//定時器配置
static void Timer_Init(void)
{
//配置1ms公用定時器
T1CON=0x0000;//關閉定時器運行
IFS0&= ~T1IF;
//_T1IF=0;
_T1IP=4;
//_T1IP=4;
_T1IE=1;
PR1=PUBLIC_PERIOD*BSP_CPU_ClkFrq()/1000L-1;//設置1ms公用定時器周期,38706(0x9732)
TMR1 = 0;
T1CON=0x8000;//啟動定時器運行
}
static void Timer7_Init(void)
{
_T7IE=0;//禁止T3中斷
T7CON = 0x0000;//關閉定時器
T6CONbits.T32=0;//T2,T3作為16位模式
PR7 = 1511;
TMR7 = 0;
T7CON = 0x8030;//預分頻比256:1,啟動時基計數,中断周期为433.439ms
_T7IP=5;//提高T2优先级,保证
_T7IE=1;
}
///////////////////////////////////////////////////
void System_Init(void)
{
WDT_Init();
Osc_Init();
Port_Init();
CNInt_Init();
Counter_Init();
CurrAD_Init();
UART1_Init(9600);
UART2_Init(9600); /* Initialize target specific code */
ICInt_Init();
PWM_Init();
Timer_Init();
Timer7_Init();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -