| [VS Code で NXP マイコン開発 6]へ | [VS Code で NXP マイコン開発 8]...(準備中) | ||
| NXP VS Code まとめサイト |
目次
- はじめに
- 1. Pin Configuration Tool で Ctimer の割り振り
- 2. Clock Configuration Tool で Ctimer のクロック設定
- 3. VS Code Manage Componets での Ctimer Driver の追加
- 4. Peripheral Configuratoin Tool で Ctimer PWM の設定
- 5. Ctimer PWM の 初期化方法と DUTY の変更方法
- 6. スイッチを押したら LED の明るさが変更される調光機能
- 終わりに
はじめに
この記事では [VS Code で NXP マイコン開発 6] Configuration Tool を使ってサンプルをカスタマイズする (GPIO) で動作確認した、LED 点灯機能に Ctimer の PWM 機能を追加して、LED の調光機能を実現する方法を解説しています。
Clock Configuration Tool と Peripheral Configuratoin Tool を実際に設定して、ペリフェラルの有効化を学ぶことができます。
25.12 バージョンの環境にて、FRDM-MCXN947 の Hello World プロジェクトが構築し、LED と スイッチ割り込みの動作が確認済みである状態から解説をします。
参考:[VS Code で NXP マイコン開発 2] MCUXpresso for Visual Studio Code でサンプル・プロジェクトを作成する方法
参考:[VS Code で NXP マイコン開発 3] FRDM-MCXN947 を使って Hello World を Debug してみた
ポイント:右上の、各アイコンを押すことで、Pin Tools と Clock Tools と Peripheral Tools の画面を変更可能です。
1. Pin Configuration Tool で Ctimer の割り振り
Pin Configuration Tool を起動し、LED_BLUE に設定していた P1_2 を CTIMER1:MATCH,0 を割り当てます。
GPIO の設定を一度 OFF にした後、CTIMER を ON にするとうまく設定できます。
Routing Details はデフォルトのままで問題ありませんが、Label と Identifer は設定しておきます。
設定が完了したら、Update Code を押して更新させておきます。
2. Clock Configuration Tool で Ctimer のクロック設定
Clock Configuration Tool を起動後、Clocks Diagram Tab を表示します。
今回使用する CTIMER1 の CLOCK 設定場所を表示します。
2つ設定項目があります。
- CTMERCLKSEL1:CTIMER のクロックソースの選択
- CTMER1CLKDIV:周波数の分周設定
CTMERCLKSEL1 の設定を FRO 12MHz Clock に設定し、CTMER1CLKDIV の設定を "Enable the Divider Couner" に設定し "/1" に設定します。
CTIMER1 を 12MHz で動作させる設定になれば完了です。Update Code を実行して設定を反映させてください。
ここで一度 Configuration Tool を閉じます。
3. VS Code Manage Componets での Ctimer Driver の追加
一度 VS Code に戻り、プロジェクトを右クリックして、Cofigure > Manage Components を押します。
Driver Configuration > Ctimer のチェックを入れて、Save ボタンを押したら、Driver の追加完了です。
画面を閉じて、Configuration Tool を再度立ち上げます。
ポイント:先に Manage Components で使用するペリフェラルの Driver を有効にしたのち、VS Code を立ち上げることでDriver が組み込まれていないというエラーが発生しなくなります。
4. Peripheral Configuratoin Tool で Ctimer PWM の設定
Peripheral Configuration Tool を表示しますと、Config Tools Overview が表示されるかと思います。
Peripherals の設定を有効にして、生成されるファイルのパスを確認します。
問題なければ、右下の "Close and Update Code" を押して画面を閉じます。
Peripheral Driver の + ボタンを押します。
表示された画面にて、Latest Component を選択するとペリフェラルを選択できるようになります。
CTIMER を PWM の設定に変更し、使用する番号として CTAIMER1 に変更します。
Clock Configuration Tool で 12MHz の設定にしたので、Prescaler 機能を 12 に設定して基準クロックを 1MHz に設定します。
PWM の周期を生成する CH を 1 に設定して 1ms の設定にすることで、周期設定 1000 ticks が設定されます。
CTIMER の CH0 を Pin Configuration Tool で設定しましたので、Chanel 0 を PWM の出力に設定します。
PWM Duty の初期値は 50% である 500us を設定しておきます。
5. Ctimer PWM の 初期化方法と DUTY の変更方法
6. スイッチを押したら LED の明るさが変更される調光機能
最終的なコードを次の通り作成すれば、スイッチを押したあと、DUTY が更新され、LED の明るさも変化するかと思います。
ポイント:出力が Low の時に LED が点灯する評価ボードの為、DUTY 100% の時 LED 消灯する構成になります。
#include "fsl_device_registers.h"
#include "fsl_debug_console.h"
#include "board.h"
#include "app.h"
#include "pin_mux.h"
#include "fsl_port.h"
#include "fsl_gpio.h"
#include "fsl_common.h"
#include "fsl_ctimer.h"
#include "peripherals.h"
/*******************************************************************************
* Definitions
******************************************************************************/
#define BOARD_SW_IRQ GPIO00_IRQn
#define BOARD_SW_IRQ_HANDLER GPIO00_IRQHandler
/*******************************************************************************
* Prototypes
******************************************************************************/
/*******************************************************************************
* Variables
******************************************************************************/
volatile int switch_flag = 0;
static int duty_percent = 50;
/*******************************************************************************
* Code
******************************************************************************/
/*!
* @brief Interrupt service fuction of switch.
*
* This function toggles the LED
*/
void BOARD_SW_IRQ_HANDLER(void)
{
GPIO_GpioClearInterruptFlags(BOARD_INITPINS_SWITCH_GPIO, 1U << BOARD_INITPINS_SWITCH_GPIO_PIN);
switch_flag=1;
}
/*!
* @brief Main function
*/
int main(void)
{
/* Init board hardware. */
BOARD_InitHardware();
EnableIRQ(BOARD_SW_IRQ);
PRINTF("MCUX SDK version: %s\r\n", MCUXSDK_VERSION_FULL_STR);
PRINTF("hello world.\r\n");
CTIMER_StartTimer(CTIMER1_PERIPHERAL);
PRINTF("\r\nPlease push Switch for PWM DUTY Down\r\n");
while (1)
{
if(switch_flag==1){
switch_flag = 0;
duty_percent -= 5;
if (duty_percent < 0)
{
duty_percent = 100;
}
(void)CTIMER_UpdatePwmDutycycle(CTIMER1_PERIPHERAL,
CTIMER1_PWM_PERIOD_CH,
CTIMER1_PWM_OUTPUT_CHANNEL,
(uint8_t)duty_percent);
PRINTF("Duty = %d%%\r\n", duty_percent);
}
}
}終わりに
Ctimer の PWM を参考に Peripheral Configuration Tool の使い方を解説いたしました。
VS Code でも Peripheral Configuration Tool を使用して初期化処理を自動生成することができること確認頂けたかと思います。
| [VS Code で NXP マイコン開発 6]へ | [VS Code で NXP マイコン開発 8]...(準備中) | ||
| NXP VS Code まとめサイト |