Drive the LED_PWM line of the left half via TPM which doesn't work yet for some reason. Add protocol command for setting the LED_PWM brightness of the left half. Expose UpdateUsbReports()

This commit is contained in:
László Monda
2017-01-13 21:43:47 +01:00
parent 0ded50b43a
commit 9ef9e5f734
10 changed files with 89 additions and 8 deletions

View File

@@ -3,6 +3,7 @@
#include "main.h"
#include "i2c_addresses.h"
#include "i2c.h"
#include "led_pwm.h"
void SetError(uint8_t error);
void SetGenericError();
@@ -31,10 +32,16 @@ void BridgeProtocolHandler()
BridgeTxSize = KEYBOARD_MATRIX_COLS_NUM*KEYBOARD_MATRIX_ROWS_NUM;
memcpy(BridgeTxBuffer, keyMatrix.keyStates, BridgeTxSize);
break;
case BRIDGE_COMMAND_SET_LED:
case BRIDGE_COMMAND_SET_TEST_LED:
TEST_LED_OFF();
BridgeTxSize = 0;
TEST_LED_SET(BridgeRxBuffer[1]);
break;
case BRIDGE_COMMAND_SET_LED_PWM:
BridgeTxSize = 0;
uint8_t brightnessPercent = BridgeRxBuffer[1];
LedPwm_SetBrightness(brightnessPercent);
TEST_LED_SET(brightnessPercent == 0);
break;
}
}

View File

@@ -14,7 +14,8 @@
#define PROTOCOL_RESPONSE_GENERIC_ERROR 1
#define BRIDGE_COMMAND_GET_KEY_STATES 0
#define BRIDGE_COMMAND_SET_LED 1
#define BRIDGE_COMMAND_SET_TEST_LED 1
#define BRIDGE_COMMAND_SET_LED_PWM 2
// Variables:

View File

@@ -6,6 +6,7 @@
#include "fsl_i2c.h"
#include "fsl_clock.h"
#include "i2c.h"
#include "led_pwm.h"
void InitI2c() {
port_pin_config_t pinConfig = {
@@ -41,5 +42,6 @@ void InitPeripherials(void)
{
InitLedDriver();
InitTestLed();
LedPwm_Init();
InitI2c();
}

31
left/src/led_pwm.c Normal file
View File

@@ -0,0 +1,31 @@
#include "led_pwm.h"
#include "fsl_port.h"
void LedPwm_Init() {
tpm_config_t tpmInfo;
tpm_chnl_pwm_signal_param_t tpmParam[1];/* = {{
.chnlNumber = LED_PWM_TPM_CHANNEL,
.level = kTPM_LowTrue,
.dutyCyclePercent = 00,
}};*/
CLOCK_EnableClock(LED_PWM_CLOCK);
PORT_SetPinMux(LED_PWM_PORT, LED_PWM_PIN, kPORT_MuxAlt2);
tpmParam[0].chnlNumber = LED_PWM_TPM_CHANNEL;
tpmParam[0].level = kTPM_LowTrue;
tpmParam[0].dutyCyclePercent = 100 - INITIAL_DUTY_CYCLE_PERCENT;
TPM_GetDefaultConfig(&tpmInfo);
TPM_Init(LED_PWM_TPM_BASEADDR, &tpmInfo);
TPM_SetupPwm(LED_PWM_TPM_BASEADDR, tpmParam, sizeof(tpmParam),
kTPM_EdgeAlignedPwm, TPM_PWM_FREQUENCY, TPM_SOURCE_CLOCK);
TPM_StartTimer(LED_PWM_TPM_BASEADDR, kTPM_SystemClock);
// LedPwm_SetBrightness(INITIAL_DUTY_CYCLE_PERCENT);
}
void LedPwm_SetBrightness(uint8_t brightnessPercent)
{
TPM_UpdatePwmDutycycle(LED_PWM_TPM_BASEADDR, LED_PWM_TPM_CHANNEL,
kTPM_EdgeAlignedPwm, 100-brightnessPercent);
}

27
left/src/led_pwm.h Normal file
View File

@@ -0,0 +1,27 @@
#ifndef __LED_PWM_H__
#define __LED_PWM_H__
// Includes:
#include "fsl_tpm.h"
// Macros:
#define LED_PWM_PORT PORTB
#define LED_PWM_CLOCK kCLOCK_PortB
#define LED_PWM_PIN 5
#define LED_PWM_TPM_BASEADDR TPM1
#define LED_PWM_TPM_CHANNEL kTPM_Chnl_1
#define TPM_SOURCE_CLOCK CLOCK_GetFreq(kCLOCK_BusClk)
#define TPM_PWM_FREQUENCY 24000U
#define INITIAL_DUTY_CYCLE_PERCENT 100U
// Functions:
extern void LedPwm_Init();
void LedPwm_SetBrightness(uint8_t brightnessPercent);
#endif