Commit 68db804c authored by Vladimír Drobný's avatar Vladimír Drobný
Browse files

Periodically measure battery and toggle LEDs

parent bcae9fe0
Loading
Loading
Loading
Loading
+26 −2
Original line number Diff line number Diff line
@@ -184,6 +184,7 @@ instance:
      - 1: []
      - 2: []
      - 3: []
      - 4: []
    - interrupts: []
 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/* clang-format on */
@@ -213,14 +214,24 @@ instance:
      - clockSourceFreq: 'ClocksTool_DefaultInit'
      - timerPrescaler: '1'
    - EnableTimerInInit: 'true'
    - matchChannels: []
    - matchChannels:
      - 0:
        - matchChannelPrefixId: 'MATCH_1Hz'
        - matchChannel: 'kCTIMER_Match_0'
        - matchValueStr: '1 Hz'
        - enableCounterReset: 'true'
        - enableCounterStop: 'false'
        - outControl: 'kCTIMER_Output_NoAction'
        - outPinInitValue: 'low'
        - enableInterrupt: 'true'
    - captureChannels: []
    - interruptCallbackConfig:
      - interrupt:
        - IRQn: 'CTIMER0_IRQn'
        - enable_priority: 'false'
        - priority: '0'
      - callback: 'kCTIMER_NoCallback'
      - callback: 'kCTIMER_SingleCallback'
      - singleCallback: 'CTIMER0_1Hz'
 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS **********/
/* clang-format on */
const ctimer_config_t CTIMER0_config = {
@@ -228,10 +239,23 @@ const ctimer_config_t CTIMER0_config = {
  .input = kCTIMER_Capture_0,
  .prescale = 0
};
const ctimer_match_config_t CTIMER0_MATCH_1Hz_config = {
  .matchValue = 149999999,
  .enableCounterReset = true,
  .enableCounterStop = false,
  .outControl = kCTIMER_Output_NoAction,
  .outPinInitState = false,
  .enableInterrupt = true
};
/* Single callback functions definition */
ctimer_callback_t CTIMER0_callback[] = {CTIMER0_1Hz};

static void CTIMER0_init(void) {
  /* CTIMER0 peripheral initialization */
  CTIMER_Init(CTIMER0_PERIPHERAL, &CTIMER0_config);
  /* Match channel 0 of CTIMER0 peripheral initialization */
  CTIMER_SetupMatch(CTIMER0_PERIPHERAL, CTIMER0_MATCH_1HZ_CHANNEL, &CTIMER0_MATCH_1Hz_config);
  CTIMER_RegisterCallBack(CTIMER0_PERIPHERAL, CTIMER0_callback, kCTIMER_SingleCallback);
  /* Start the timer */
  CTIMER_StartTimer(CTIMER0_PERIPHERAL);
}
+8 −0
Original line number Diff line number Diff line
@@ -48,6 +48,10 @@ extern "C" {
#define CTIMER0_TICK_PERIOD 7UL
/* Definition of PWM period channel. */
#define CTIMER0_PWM_PERIOD_CH kCTIMER_Match_0
/* Definition of channel 0 ID */
#define CTIMER0_MATCH_1HZ_CHANNEL kCTIMER_Match_0
/* CTIMER0 interrupt vector ID (number). */
#define CTIMER0_TIMER_IRQN CTIMER0_IRQn
/* Definition of peripheral ID */
#define CTIMER1_PERIPHERAL CTIMER1
/* Timer tick frequency in Hz (input frequency of the timer) */
@@ -217,6 +221,7 @@ extern "C" {
extern edma_config_t DMA0_config;
extern const edma_channel_Preemption_config_t DMA0_CH0_preemption_config;
extern const ctimer_config_t CTIMER0_config;
extern const ctimer_match_config_t CTIMER0_MATCH_1Hz_config;
extern const ctimer_config_t CTIMER1_config;
extern const lpadc_config_t ADC0_config;
extern lpadc_conv_command_config_t ADC0_commandsConfig[1];
@@ -240,6 +245,9 @@ extern lpadc_conv_trigger_config_t ADC1_triggersConfig[1];
/***********************************************************************************************************************
 * Callback functions
 **********************************************************************************************************************/
  /* Single callback function declaration */
extern void CTIMER0_1Hz(uint32_t flags);
extern ctimer_callback_t CTIMER0_callback[];
/* LPUART transfer callback function for the LP_FLEXCOMM1 component (init. function BOARD_InitPeripherals)*/
extern void LPUART_UserCallback(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *userData);

+1 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@
    <stringAttribute key="com.crt.ctrlcenter.currentWireType" value="SWD"/>
    <booleanAttribute key="com.crt.ctrlcenter.mainBreakIsHardware" value="true"/>
    <booleanAttribute key="com.crt.ctrlcenter.saveState" value="true"/>
    <stringAttribute key="com.crt.ctrlcenter.serialNumber" value="LinkServerNXP SemiconductorsMCU-LINK FRDM-MCXN947 (r0E7) CMSIS-DAP V3.128OH53RKSMW5K3V"/>
    <stringAttribute key="com.crt.ctrlcenter.serialNumber" value="LinkServerNXP SemiconductorsMCU-LINK FRDM-MCXN947 (r0E7) CMSIS-DAP V3.128G0ROD01COJZHP"/>
    <listAttribute key="com.crt.ctrlcenter.symbolsAndImagesGroupSettings"/>
    <intAttribute key="com.crt.ctrlcenter.version" value="6"/>
    <stringAttribute key="com.nxp.mcuxpresso.flash.base.address" value="0x0"/>
+15 −12
Original line number Diff line number Diff line
@@ -1181,16 +1181,6 @@
                  <data type="Version">2.3.0</data>
               </feature>
            </dependency>
            <dependency resourceType="Tool" resourceId="Pins" description="The Pins tool is required by the Peripherals tool, but it is disabled." problem_level="2" source="Peripherals">
               <feature name="enabled" evaluation="equal">
                  <data>true</data>
               </feature>
            </dependency>
            <dependency resourceType="Tool" resourceId="Clocks" description="The Clocks tool is required by the Peripherals tool, but it is disabled." problem_level="2" source="Peripherals">
               <feature name="enabled" evaluation="equal">
                  <data>true</data>
               </feature>
            </dependency>
         </dependencies>
         <generated_project_files>
            <file path="board/peripherals.c" update_enabled="true"/>
@@ -1333,6 +1323,7 @@
                           <struct name="1"/>
                           <struct name="2"/>
                           <struct name="3"/>
                           <struct name="4"/>
                        </array>
                        <array name="interrupts"/>
                     </config_set>
@@ -1346,7 +1337,18 @@
                           <setting name="timerPrescaler" value="1"/>
                        </struct>
                        <setting name="EnableTimerInInit" value="true"/>
                        <array name="matchChannels"/>
                        <array name="matchChannels">
                           <struct name="0">
                              <setting name="matchChannelPrefixId" value="MATCH_1Hz"/>
                              <setting name="matchChannel" value="kCTIMER_Match_0"/>
                              <setting name="matchValueStr" value="1 Hz"/>
                              <setting name="enableCounterReset" value="true"/>
                              <setting name="enableCounterStop" value="false"/>
                              <setting name="outControl" value="kCTIMER_Output_NoAction"/>
                              <setting name="outPinInitValue" value="low"/>
                              <setting name="enableInterrupt" value="true"/>
                           </struct>
                        </array>
                        <array name="captureChannels"/>
                        <struct name="interruptCallbackConfig">
                           <struct name="interrupt">
@@ -1354,7 +1356,8 @@
                              <setting name="enable_priority" value="false"/>
                              <setting name="priority" value="0"/>
                           </struct>
                           <setting name="callback" value="kCTIMER_NoCallback"/>
                           <setting name="callback" value="kCTIMER_SingleCallback"/>
                           <setting name="singleCallback" value="CTIMER0_1Hz"/>
                        </struct>
                     </config_set>
                  </instance>
+18 −6
Original line number Diff line number Diff line
@@ -38,6 +38,24 @@ void LPUART_UserCallback(LPUART_Type *base, lpuart_handle_t *handle, status_t st
    }
}

void CTIMER0_1Hz(uint32_t flags) {
	// Battery - light LEDs accoring to voltage, start measuring again
	int bat_v = bat_voltage_mV();
	float level = ((float)bat_v - 7200) / (8400 - 7200);
	if (level > 1)
		level = 1;
	else if (level < 0)
		level = 0;

	int led_count = level * 4;
	GPIO_PinWrite(BATTERY_LED_0_GPIO, BATTERY_LED_0_PIN, led_count > 0);
	GPIO_PinWrite(BATTERY_LED_1_GPIO, BATTERY_LED_1_PIN, led_count > 1);
	GPIO_PinWrite(BATTERY_LED_2_GPIO, BATTERY_LED_2_PIN, led_count > 2);
	GPIO_PinWrite(BATTERY_LED_3_GPIO, BATTERY_LED_3_PIN, led_count > 3);
	PRINTF("BATTERY: %d\r\n", bat_voltage_mV());
	measure_bat();
}

int main(void) {
    /* Init board hardware. */
    BOARD_InitBootPins();
@@ -48,8 +66,6 @@ int main(void) {
    BOARD_InitDebugConsole();
#endif

    measure_bat();

    PRINTF("Hello World\r\n");
    init_camera();
    start_camera();
@@ -58,10 +74,6 @@ int main(void) {

	unsigned new_camera_frame = 0;
    while(1) {
    	measure_bat();
    	PRINTF("BATTERY: %d\r\n", bat_voltage_mV());


    	if (got_packet) {
    		got_packet = 0;
    		handle_received_packet();