⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 massinit.c

📁 uCOS在PIC芯片中的移植:以PIC24HJ64GP210为例进行uCOS在Microchip芯片中的移植
💻 C
📖 第 1 页 / 共 2 页
字号:
/*
*********************************************************************************************************
*                                              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 + -