commit
a5c28afd61
@ -7,6 +7,9 @@
|
|||||||
#include "Master.h"
|
#include "Master.h"
|
||||||
#include "Rotary.h"
|
#include "Rotary.h"
|
||||||
#include "retarget_uart.h"
|
#include "retarget_uart.h"
|
||||||
|
#include "LiquidCrystal.h"
|
||||||
|
|
||||||
|
void lcd_starting();
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
@ -17,6 +20,8 @@ int main(void)
|
|||||||
|
|
||||||
printf("Hello there!\r\n");
|
printf("Hello there!\r\n");
|
||||||
|
|
||||||
|
lcd_starting();
|
||||||
|
|
||||||
ThreadCommon::ThreadManager* manager = new ThreadCommon::ThreadManager;
|
ThreadCommon::ThreadManager* manager = new ThreadCommon::ThreadManager;
|
||||||
ThreadCommon::QueueManager* qmanager = new ThreadCommon::QueueManager;
|
ThreadCommon::QueueManager* qmanager = new ThreadCommon::QueueManager;
|
||||||
//Creating queues
|
//Creating queues
|
||||||
@ -36,3 +41,44 @@ int main(void)
|
|||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief While we don't have UI, this should do for LCD.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
void lcd_starting() {
|
||||||
|
// LCD pins init.
|
||||||
|
//Well, this lpc is a bit different with those. Table 83 from UM10732-11u68.pdf
|
||||||
|
DigitalIoPin *rs = new DigitalIoPin(1, 9, false);
|
||||||
|
Chip_IOCON_PinMuxSet (LPC_IOCON, 1, 9, (IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||||
|
|
||||||
|
DigitalIoPin *en = new DigitalIoPin(0, 14, false);
|
||||||
|
Chip_IOCON_PinMuxSet (LPC_IOCON, 0, 14, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||||
|
|
||||||
|
DigitalIoPin *d4 = new DigitalIoPin(0, 13, false);
|
||||||
|
Chip_IOCON_PinMuxSet (LPC_IOCON, 0, 13, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||||
|
|
||||||
|
DigitalIoPin *d5 = new DigitalIoPin(0, 12, false);
|
||||||
|
Chip_IOCON_PinMuxSet (LPC_IOCON, 0, 12, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||||
|
|
||||||
|
DigitalIoPin *d6 = new DigitalIoPin(0, 23, false);
|
||||||
|
Chip_IOCON_PinMuxSet (LPC_IOCON, 0, 23, (IOCON_FUNC0 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||||
|
|
||||||
|
DigitalIoPin *d7 = new DigitalIoPin(0, 11, false);
|
||||||
|
Chip_IOCON_PinMuxSet (LPC_IOCON, 0, 11, (IOCON_FUNC1 | IOCON_MODE_INACT | IOCON_DIGMODE_EN));
|
||||||
|
|
||||||
|
rs->write(false);
|
||||||
|
en->write(false);
|
||||||
|
d4->write(false);
|
||||||
|
d5->write(false);
|
||||||
|
d6->write(false);
|
||||||
|
d7->write(false);
|
||||||
|
// LCD init.
|
||||||
|
LiquidCrystal *lcd = new LiquidCrystal(rs, en, d4, d5, d6, d7);
|
||||||
|
// LCD configure display geometry.
|
||||||
|
lcd->begin(16, 2);
|
||||||
|
lcd->setCursor (0, 0);
|
||||||
|
lcd->print("Hello there");
|
||||||
|
lcd->setCursor (0, 1);
|
||||||
|
lcd->print("Starting...");
|
||||||
|
}
|
||||||
|
|||||||
@ -1,39 +1,71 @@
|
|||||||
#include "LiquidCrystal.h"
|
#include "LiquidCrystal.h"
|
||||||
|
|
||||||
// Remove this when code will be reworked.
|
|
||||||
#ifndef LiquidCrystal_NOT_FIXED
|
|
||||||
// Remove this when code will be reworked.
|
|
||||||
|
|
||||||
|
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include "chip.h"
|
#include "chip.h"
|
||||||
|
#include "board.h"
|
||||||
|
|
||||||
#define LOW 0
|
#define LOW 0
|
||||||
#define HIGH 1
|
#define HIGH 1
|
||||||
|
#define MHz1 1000000
|
||||||
|
|
||||||
|
static bool match_flag = false;
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
/**
|
||||||
|
* @brief Handle interrupt from 32-bit timer 0
|
||||||
|
* Sets match_flag to true when the match occurs.
|
||||||
|
* @return Nothing
|
||||||
|
*/
|
||||||
|
void TIMER32_0_IRQHandler(void)
|
||||||
|
{
|
||||||
|
if(Chip_TIMER_MatchPending(LPC_TIMER32_0, 0)) {
|
||||||
|
Chip_TIMER_ClearMatch(LPC_TIMER32_0, 0);
|
||||||
|
match_flag = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
void delayMicroseconds(unsigned int us)
|
void delayMicroseconds(unsigned int us)
|
||||||
{
|
{
|
||||||
// implement with RIT
|
/* Reset match flag */
|
||||||
}
|
match_flag = false;
|
||||||
#else
|
|
||||||
void delayMicroseconds(uint32_t delay)
|
|
||||||
{
|
|
||||||
static int init;
|
|
||||||
if(!init) {
|
|
||||||
// start core clock counter
|
|
||||||
CoreDebug->DEMCR |= 1 << 24;
|
|
||||||
DWT->CTRL |= 1;
|
|
||||||
init = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
uint32_t start = DWT->CYCCNT;
|
/* Initialize 32-bit timer 0 clock */
|
||||||
delay = delay * 72; // assuming 72MHz clock
|
Chip_TIMER_Init(LPC_TIMER32_0);
|
||||||
while(DWT->CYCCNT - start < delay);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
/* Timer setup for match and interrupt at TICKRATE_HZ */
|
||||||
|
Chip_TIMER_Reset(LPC_TIMER32_0);
|
||||||
|
|
||||||
|
/* Enable timer to generate interrupt when time matches */
|
||||||
|
Chip_TIMER_MatchEnableInt(LPC_TIMER32_0, 0);
|
||||||
|
|
||||||
|
/* Setup 32-bit timer's duration (32-bit match time) */
|
||||||
|
/* Once_per_microsecond * number_of_microseconds. */
|
||||||
|
Chip_TIMER_SetMatch(LPC_TIMER32_0, 0, (Chip_Clock_GetSystemClockRate() / MHz1 * us));
|
||||||
|
|
||||||
|
/* Setup timer to stop when match occurs */
|
||||||
|
Chip_TIMER_StopOnMatchEnable(LPC_TIMER32_0, 0);
|
||||||
|
|
||||||
|
/* Start timer */
|
||||||
|
Chip_TIMER_Enable(LPC_TIMER32_0);
|
||||||
|
|
||||||
|
/* Clear timer of any pending interrupts */
|
||||||
|
NVIC_ClearPendingIRQ(TIMER_32_0_IRQn);
|
||||||
|
|
||||||
|
/* Enable timer interrupt */
|
||||||
|
NVIC_EnableIRQ(TIMER_32_0_IRQn);
|
||||||
|
|
||||||
|
/* Wait for the interrupt to trigger */
|
||||||
|
while(!match_flag);
|
||||||
|
|
||||||
|
/*Disable the interrupt*/
|
||||||
|
Chip_TIMER_MatchDisableInt(LPC_TIMER32_0, 0);
|
||||||
|
|
||||||
|
/* Disable timer */
|
||||||
|
Chip_TIMER_Disable(LPC_TIMER32_0);
|
||||||
|
|
||||||
|
/* Deinitialise timer. */
|
||||||
|
Chip_TIMER_DeInit(LPC_TIMER32_0);
|
||||||
|
}
|
||||||
|
|
||||||
// When the display powers up, it is configured as follows:
|
// When the display powers up, it is configured as follows:
|
||||||
//
|
//
|
||||||
@ -291,7 +323,3 @@ void LiquidCrystal::write4bits(uint8_t value) {
|
|||||||
|
|
||||||
pulseEnable();
|
pulseEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove this when code will be reworked.
|
|
||||||
#endif /* LiquidCrystal_NOT_FIXED */
|
|
||||||
// Remove this when code will be reworked.
|
|
||||||
|
|||||||
@ -1,11 +1,6 @@
|
|||||||
#ifndef LiquidCrystal_h
|
#ifndef LiquidCrystal_h
|
||||||
#define LiquidCrystal_h
|
#define LiquidCrystal_h
|
||||||
|
|
||||||
// Remove this when code will be reworked.
|
|
||||||
#define LiquidCrystal_NOT_FIXED
|
|
||||||
#ifndef LiquidCrystal_NOT_FIXED
|
|
||||||
// Remove this when code will be reworked.
|
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include "chip.h"
|
#include "chip.h"
|
||||||
@ -98,8 +93,4 @@ private:
|
|||||||
uint8_t _numlines,_currline;
|
uint8_t _numlines,_currline;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Remove this when code will be reworked.
|
|
||||||
#endif /* LiquidCrystal_NOT_FIXED */
|
|
||||||
// Remove this when code will be reworked.
|
|
||||||
|
|
||||||
#endif /* LiquidCrystal_h */
|
#endif /* LiquidCrystal_h */
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user