📄 massinit.c
字号:
/*
*********************************************************************************************************
* Microchip PIC24FJ
* Board Support Package
*
* Micrium
* (c) Copyright 2005, Micrium, Weston, FL
* All Rights Reserved
*
*
* File : MassInit.C
* By : tbh080602
*********************************************************************************************************
*/
#include <includes.h>
/*
*********************************************************************************************************
* MPLAB CONFIGURATION MACROS
*********************************************************************************************************
*/
_FGS(GCP_OFF);//用户程序存储区不被代码保护
_FOSCSEL(FNOSC_PRIPLL & IESO_OFF);//禁止温度保护,带PLL 的主(XT、HS 或EC)振荡器,使用用户选择的振荡器源启动器件
_FOSC(FCKSM_CSDCMD & OSCIOFNC_OFF & POSCMD_EC);//禁止时钟切换,禁止故障保护时钟监视器,OSC2为时钟输出,EC(外部时钟)模式
_FWDT(FWDTEN_OFF);//通过用户软件使能/禁止看门狗定时器(可通过清零RCON 寄存器中的SWDTEN 位来禁止LPRC)
_FPOR(FPWRT_PWR1);//禁止上电复位定时器值
INT16U AdDmaSpace[1] __attribute__ ((address(0x2800-((1<<CNT_AN_DMA_WORDS_ORDER)*CNT_AN_NUMBER<<1))));
/*
*********************************************************************************************************
* VARIABLES
*********************************************************************************************************
*/
/*
*********************************************************************************************************
* PROTOTYPES
*********************************************************************************************************
*/
//所有管腳共用屬性配置(模擬/數字,輸入/輸出,輸出初始電平)
static void Port_Init(void)
{
//將AN0~AN4(與RB0~RB3復用)作為模擬口,其余作為數字口進行配置
AD1PCFGH=0xFFFF;
AD1PCFGL=0xFFF0;
//AD2PCFGL=0xFFF0;//PIC24HJ256GP610含有
//除MCBTEST為低電平點亮外,其余輸出均為高電平有效
//PORTA RA15 RA14 RA13 RA12 RA11 RA10 RA9 RA8 RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0
//pin 67 66 19 18 no 29 28 no 92 91 61 60 59 58 38 17
//net M4-2Current M3-2Current M2-2Current M1-2Current no VREF+ VREF- no MS8Sensor中 MS7Sensor寬 - - - - ErrorCtrl -
//有效電平 高電平表過流 高電平表寬度到位
ODCA = 0x0000;
PORTA = 0x0000;
LATA = 0x0000;
TRISA = 0xF6C0;//0xF6C0//1111011011000000
//PORTB RB15 RB14 RB13 RB12 RB11 RB10 RB9 RB8 RB7 RB6 RB5 RB4 RB3 RB2 RB1 RB0
//pin 44 43 42 41 35 34 33 32 27 26 20 21 22 23 24 25
//net MS10Sensor - - - - - - - PGD PGC - - I4-Sample I3-Sample I2-Sample I1-Sample
//有效電平 低電平表上限到位
PORTB = 0x0000;
TRISB = 0X800F;//0x000F;//1000000000001111
//PORTC RC15 RC14 RC13 RC12 RC11 RC10 RC9 RC8 RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
//pin 64 74 73 63 no no no no no no no 09 08 07 06 no
//net - - - OSC1 no no no no no no no MS14Sensor - MS5Sensor - no
//有效電平 升降計數 出退計數(低:兩端)
PORTC = 0x0000;
LATC = 0x0000;
TRISC = 0X0014;//0x601F;//0000000000010100
//PORTD RD15 RD14 RD13 RD12 RD11 RD10 RD9 RD8 RD7 RD6 RD5 RD4 RD3 RD2 RD1 RD0
//pin 48 47 80 79 71 70 69 68 84 83 82 81 78 77 76 72
//net MS13Sensor MS12Sensor MS6Sensor - MS14Sensor MS5Sensor - M1Sensor M4BackPower M4ForePower M3BackPower M3ForePower - M2BackPower M2ForePower M1Power
//有效電平 低:下限 未用 高:窄/揉捏速檢 升降速檢 出退速檢 敲打速檢 升降反向 升降正向 揉捏反向 揉捏正向 出退反向 出退正向 敲打
ODCD = 0x0000;
PORTD = 0x0000;
LATD = 0x0000;
TRISD = 0XED00;//0xFF00;//1110110100000000
//PORTE RE15 RE14 RE13 RE12 RE11 RE10 RE9 RE8 RE7 RE6 RE5 RE4 RE3 RE2 RE1 RE0
//pin no no no no no no no no 05 04 03 100 99 98 94 93
//net no no no no no no no no - - - - - - - -
//PORTF RF15 RF14 RF13 RF12 RF11 RF10 RF9 RF8 RF7 RF6 RF5 RF4 RF3 RF2 RF1 RF0
//pin no no 39 40 no no no 53 54 55 50 49 51 52 88 87
//net no no MCBTest - no no no - - - DebugTxd1 DebugRxd1 LcbTxd1 LcbRxd1 - -
//有效電平 低電平點亮指示燈
ODCF = 0x0000;
PORTF = 0x0000;
LATF = 0x0000;
TRISF = 0X0014;//0x003C;//0000000000010100
//PORTG RG15 RG14 RG13 RG12 RG11 RG10 RG9 RG8 RG7 RG6 RG5 RG4 RG3 RG2 RG1 RG0
//pin 01 95 97 96 no no 14 12 11 10 no no 56 57 89 90
//net - - - - no no LCBTest MS4Sensor MS3Sensor MS2Sensor no no - - - -
//有效電平 LCB輸入 未用 低:後限 低:前限
ODCG = 0x0000;
PORTG = 0x0000;
LATG = 0x0000;
TRISG = 0X01C0;//0x0000;//0000001111000000
}
//MS6~MS8電平變化中斷配置
static void CNInt_Init(void)
{
//電平變化檢測腳
CNEN1 = 0x1700;//CN8(RG6)CN9(RG7)CN10(RG8)CN12(RB15) zds0607
CNEN2 = 0x00F0;;//CN20(RD14)CN21(RD15)CN22(RA6)CN23(RA7) zds0607
//寬度檢測:高電平有效
_CN19IE=1;//MS6Sensor窄
_CN22IE=1;//MS7Sensor寬
_CN23IE=1;//MS8Sensor中
//禁止電平變化檢測弱上拉
CNPU1 = 0x0000;
CNPU2 = 0x0000;
//中斷設置
_CNIF=0;
_CNIP=4;
_CNIE=1;
}
//MS5,MS14計數器配置
static void Counter_Init(void)
{
//MS5出退計數器配置
// T6CONbits.T32=0;//T6作為16位模式
// T6CONbits.TCKPS0=0;//沒有預分頻
// T6CONbits.TCKPS1=0;
// T6CONbits.TCS=1;//T6作為計數器
PR6=0xffff;//計數器周期設為最大
_T6IE=0;//不使用計數溢出中斷
// T6CONbits.TON=1;//啟動T6
T6CON=0x8002;
//MS14升降計數器配置
// T8CONbits.T32=0;//T8作為16位模式
// T8CONbits.TCKPS0=0;//沒有預分頻
// T8CONbits.TCKPS1=0;
// T8CONbits.TCS=1;//T8作為計數器
PR8=0xffff;//計數器周期設為最大
_T8IE=0;
// T8CONbits.TON=1;
T8CON=0x8002;
}
//電流采樣配置
//static void CurrAD_Init(void)
//{
// _ADON=0;//AD轉換關閉
// _AD12B=1;//12位AD轉換
// _VCFG=0x00;//选择参考电压為AVdd和AVss
// _ADRC=0;//A/D 转换时钟由系统时钟产生
// _ADCS=0x3f;//Tad=64Tcy=1.6534us
// _CHPS=0x00;//转换CH0
// _SSRC=0x07;//由内部计数器结束采样并启动转换(自动转换)
// _SAMC=0x1F;//自动采样时间為31Tad,總轉換周期為(31+14)Tad=74.403us
// _FORM=0x00;//数据输出格式為無符号的整数
// _ASAM=1;//A/D 采样自动开始
// _CSCNA=1;//使用采样多路开关A 时扫描CH0+ 输入
// _BUFM=0;//总是从地址0x0 开始填充缓冲器
// _ALTS=0;//总是使用采样多路开关A 选择的输入通道
// _CH0NA=0;//通道0 的反相输入为VREF
// _SMPI=CNT_AN_NUMBER-1;//每完成4个采样/ 转换操作将DMA 地址递增1 或产生中断(對應4個信號)
// _ADDMABM=0;//将数据以以分散/ 集中模式写入写入DMA 缓冲器,
// _DMABL=CNT_AN_DMA_WORDS_ORDER;//给每路模拟输入分配32字的缓冲区,發生DMA中斷的周期為:32*4*74.403us=9.524ms
// AD1PCFGH=0xFFFF;
// AD1PCFGL=0xFFF0;//AN0~AN3端口引脚处于模拟模式
// AD1CSSH=0x0000;
// AD1CSSL=0x000F;//选择对AN0~AN3 进行输入扫描
//
//#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;
//}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -