関数

C:/PIC/OpenSSM/main.c

#include <p24FJ64GA002.h>
#include "types.h"
#include "table.h"
#include "ssm.h"
#include "extmeter.h"
#include "main.h"
#include "libadc.h"
#include "libdac.h"
#include "librtc.h"
#include "libuart.h"
#include "libps2.h"
#include "libfontx2.h"
#include "libvideo.h"
main.cのインクルード依存関係図

ソースコードを見る。

関数

 _CONFIG1 (JTAGEN_OFF &GCP_OFF &GWRP_OFF &BKBUG_OFF &WINDIS_OFF &COE_OFF &ICS_PGx1 &FWDTEN_ON &WDTPS_PS256) _CONFIG2(IESO_OFF &FNOSC_FRCPLL &FCKSM_CSDCMD &OSCIOFNC_ON &IOL1WAY_OFF &I2C1SEL_PRI &POSCMOD_NONE) const INFO_T info
int main (void)

関数

_CONFIG1 ( JTAGEN_OFF &GCP_OFF &GWRP_OFF &BKBUG_OFF &WINDIS_OFF &COE_OFF &ICS_PGx1 &FWDTEN_ON &  WDTPS_PS256  )  const
int main ( void   ) 

main.c85 行で定義されています。

参照先 ADC::adc, adc, ADC_init(), CONFIG_init(), CONFIG_load(), DAC_init(), EXTMETER_BOOST, EXTMETER_init(), EXTMETER_main(), FONTX2_init(), GPIO_LED, KXM_OFF, KXM_ON, LED_OFF, PS2_init(), PS2_main(), rtc, RTC_get_ticks(), RTC_init(), SCREEN_init(), SCREEN_main(), SSM_init(), SSM_main(), RTC::tick, UART1_init(), UART2_init(), VIDEO_init(), VIDEO_locate(), と VIDEO_putstr().

              {
    unsigned int tick;

    /* ポートの入出力モード設定 */
    /*          FEDCBA9876543210 */
    TRISA   = 0b0000000000000011;
    TRISB   = 0b0000111101100001;
    LED_OFF();
    KXM_OFF();

    /* CPUクロックを設定する. オーバークロック時は、画面描画が若干早くなる */
    /* CPUの個体差があると思われるので、十分に検証を行うこと */
    CLKDIV = 0;
//  OSCTUN = 0b0000000000011111;    /* Fosc = 8.96MHz, Fcy = 17.92MHz, Core 35.84MHz */
    OSCTUN = 0b0000000000000000;    /* Fosc = 8.00MHz, Fcy = 16.00MHz, Core 32.00MHz */

    /* CPUの割り込みレベル設定 */
    SRbits.IPL = 0;

    /* 電源が安定するまで待つ */
    RTC_init();
    ADC_init();
    tick = rtc.tick;
    while(RTC_get_ticks(tick, rtc.tick) < 1000) ClrWdt();

    KXM_ON();

    /* 各ドライバ/モジュール/割込関数 libxxx の初期化 */
    FONTX2_init();
    VIDEO_init();
    UART1_init(115200);
    UART2_init(  4800);
    DAC_init();
    PS2_init();

    /* アプリケーション層の初期化 */
    SSM_init();
    SCREEN_init();
    EXTMETER_init(EXTMETER_BOOST);
    CONFIG_init();

    /* WDTリセットされたとき、自動ロードしない */
    if (RCONbits.WDTO){
        VIDEO_locate( 2, 1);
        VIDEO_putstr("WDT Error!");
        VIDEO_locate( 2, 2);
        VIDEO_putstr("Initializing systems...");
        while(RTC_get_ticks(tick, rtc.tick) < 50000) ClrWdt();

    /* 加速度センサが無いとき、自動ロードしない */
    } else if (adc.adc[0] < 20 && adc.adc[1] < 20 && adc.adc[2] < 20) {
        VIDEO_locate( 2, 1);
        VIDEO_putstr("Can't find Accelerometer.");
        VIDEO_locate( 2, 2);
        VIDEO_putstr("Initializing systems...");
        while(RTC_get_ticks(tick, rtc.tick) < 50000) ClrWdt();


    /* 環境設定の自動ロード */
    } else {
        VIDEO_locate( 2, 1);
        VIDEO_putstr("Now loading configurations...");
        VIDEO_locate( 2, 2);
        if(CONFIG_load()){
            VIDEO_putstr("Success");
            while(RTC_get_ticks(tick, rtc.tick) <  5000) ClrWdt();
        } else {
            VIDEO_putstr("Error");
            while(RTC_get_ticks(tick, rtc.tick) < 50000) ClrWdt();
        }
    }

    /* メインループ */
    while(1){
        ClrWdt();

        /* LEDを点滅させる。CPU負荷が高いとき、フラッシュが遅くなる */
        GPIO_LED = ‾GPIO_LED;

        /* シンプルなラウンドロビンのマルチタスク (^^; */
        SSM_main();
        SCREEN_main();
        PS2_main();
        EXTMETER_main();
    }

    /* ウォッチドックタイマによるリセットを発生させる */
    while(1);
    return(0);
}

関数の呼び出しグラフ: