西東京市にいる組み込みおやじ-電子工作、回路設計、ファーム TIPS

このブログはビーコンの代表である菅原が、電気電子、電子工作、組み込みソフトウェアなどで、自分が苦労したところや面白い気づきなどを記事にしていきます。電子工作やマイコンに親しむ人が少しでも増えたらという思いでつづります。
やっぱり、電子工作が好きなんですよ。
SAADC のタイマーをTimer0からTimer1に変更する
0

    JUGEMテーマ:組み込み開発

     

    nRF5_SDK_15.2.

    softdevice6.10

     

    examples/perifheral/saadc

    では SAADCを駆動するソースコードがある。

     

    TIMER0 を 400mSec に設定。コンペアマッチの信号を SAADCのトリガーにしている。

     

    これを

    examples/ble_xxxx

    の中にある BLEのサンプルに組み込むとハングアップする。

    bleの動作サンプルでは TIMER0を システムタイマーとして使っているらしく、ぶつかるためだ。

    ここで saadcのタイミングタイマーをTIMER1とした。

     

    本来であれば 一発でタイマーのチャンネルを切り替えることができればいいが、まだそうなっていないので、複数個所を変えないといけないのが、ちょっと残念。

     

     

    sdk_config.h

     

    #ifndef TIMER0_ENABLED
    #define TIMER0_ENABLED 1
    #endif

     

    main.c-72行目

    【旧】

    static const nrf_drv_timer_t m_timer = NRF_DRV_TIMER_INSTANCE(0);

    【新】
    static const nrf_drv_timer_t m_timer = NRF_DRV_TIMER_INSTANCE(1);
     

    main.c-98行目

    【旧】

        nrf_drv_timer_extended_compare(&m_timer,
                                       NRF_TIMER_CC_CHANNEL0,
                                       ticks,
                                       NRF_TIMER_SHORT_COMPARE0_CLEAR_MASK,
                                       false);
    【新】
        nrf_drv_timer_extended_compare(&m_timer,
                                       NRF_TIMER_CC_CHANNEL1,
                                       ticks,
                                       NRF_TIMER_SHORT_COMPARE1_CLEAR_MASK,
                                       false);

    main.c-105行目

    【旧】

        uint32_t timer_compare_event_addr = nrf_drv_timer_compare_event_address_get(&m_timer,
                                                                                    NRF_TIMER_CC_CHANNEL0);

    【新】
        uint32_t timer_compare_event_addr = nrf_drv_timer_compare_event_address_get(&m_timer,
                                                                                    NRF_TIMER_CC_CHANNEL1);

     

     

    | ビーコン菅原 | nRF5x Nordic | 11:25 | comments(0) | trackbacks(0) |
    nRF52 XTAL使わずにRCクロックでBLE通信
    0

      JUGEMテーマ:組み込み開発

       

      太陽誘電のEBSHSN をS132_SDKで開発している。

      nRF52832を搭載していて、すごく小さいのはいいが、IOが 15本しか出ていない

       

      太陽誘電

       

      このうち P0.00,P0.01 は 32.768KHzの水晶振動子

      P0.09,P0.10は NRFアンテナ端子

      P0.21 はリセット端子

      P0.05,P0.06,P0.07,P0.08は RTS/TX/CTS/RX 

      と決まっている。

      こうなると自由に使える端子は 6本しかない。

      P0.09,P0.10のNRFアンテナ端子は使わないのでIOにする。

       次にP0.05,P0.06,P0.07,P0.08は RTS/TX/CTS/RX は TX,RXのみ使い、RTS/CTSは使わないでポートとする。

      P0.21のリセット端子は残しておく。

      P0.00,P0.01 の XTALも外したい。・・だが単に LF_SRCを 内蔵の RC にしても、どうも動かない。。

      色々調べたが RCの場合は 定期的にキャリブレーションする設定にしないといけないらしい。

       

      sdk_config.h の Clockの以下定義にしたところ、BLE通信もするようになった。

      // <h> Clock - SoftDevice clock configuration

      #define NRF_SDH_CLOCK_LF_SRC 0
      #define NRF_SDH_CLOCK_LF_RC_CTIV 1
      #define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 0
      #define NRF_SDH_CLOCK_LF_ACCURACY 0

      これでP0.00,P0.01も IOポートとして使えるようになった。


       

      続きを読む >>
      | ビーコン菅原 | nRF5x Nordic | 20:05 | comments(0) | trackbacks(0) |
      nRF のスタックの指定について
      0

        JUGEMテーマ:組み込み開発

         

        nRFのスタックの指定についてメモ。

        nRF52シリーズのマイコンのBLEプロジェクトをarm-none-eabi-gccで開発しているがスタックは指定をしないと0x2000となっている。これを変更したい場合 Makefileの ASMFLAGS に -D__STACK_SIZE=(スタックサイズ)の指定をする。

        # Assembler flags common to all targets
        ASMFLAGS += -x assembler-with-cpp
        ASMFLAGS += -D__STACK_SIZE=2048
        ASMFLAGS += -DNRF52
        ASMFLAGS += -DNRF52_PAN_36
        ASMFLAGS += -DNRF52_PAN_64
        ASMFLAGS += -DSOFTDEVICE_PRESENT
        ASMFLAGS += -DBOARD_PCA10040

         

        これはcomponents/toolchain/gcc/gcc_startup_nrf52.S  (または gcc_startup_nrf51.S)

        で __STACK_SIZE が定義されていたら、それをスタックサイズとする。定義がなければ 8192とする。

        ( gcc_startup_nrf51.Sでは 定義が無い場合 2048にする。)

            .section .stack
            .align 3
        #if defined(__STARTUP_CONFIG)
            .equ    Stack_Size, __STARTUP_CONFIG_STACK_SIZE
        #elif defined(__STACK_SIZE)
            .equ    Stack_Size, __STACK_SIZE
        #else
            .equ    Stack_Size, 8192
        #endif
            .globl __StackTop
            .globl __StackLimit
        __StackLimit:
            .space Stack_Size
            .size __StackLimit, . - __StackLimit
        __StackTop:
            .size __StackTop, . - __StackTop
         

         

        components/toolchain/arm/arm_startup_nrf52.S

        を確認したところ スタックに関しては同様の記述だったので、 Keilの環境でもアセンブラのオプションに__STACK_SIZE= スタックサイズ の指定を加えたら良いと思われる。

        | ビーコン菅原 | nRF5x Nordic | 04:01 | comments(0) | trackbacks(0) |
            123
        45678910
        11121314151617
        18192021222324
        252627282930 
        << November 2018 >>
        + RECOMMEND
        + RECOMMEND
        + SELECTED ENTRIES
        + RECENT COMMENTS
        + RECENT TRACKBACK
        + CATEGORIES
        + ARCHIVES
        + つぶやき
        + MOBILE
        qrcode
        + LINKS
        + PROFILE