Skip to content

Commit b784278

Browse files
committed
uvision exporters for K64F, uticker - lptmr
- lptmr - no hal neiter driver, quick implementation using registers and internal clock - exporters for K64F - using K60 1MB target, because K64F is not available in 4.7 yet
1 parent 7a03069 commit b784278

File tree

4 files changed

+692
-7
lines changed

4 files changed

+692
-7
lines changed

libraries/mbed/targets/hal/TARGET_Freescale/TARGET_KPSDK_MCUS/TARGET_K64F/us_ticker.c

Lines changed: 63 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include "fsl_pit_driver.h"
2020
#include "fsl_sim_hal.h"
2121
#include "fsl_clock_manager.h"
22+
#include "fsl_clock_configs.h"
2223

2324
static void pit_init(void);
2425
static void lptmr_init(void);
@@ -68,11 +69,33 @@ static void pit_init(void) {
6869
static void lptmr_isr(void);
6970

7071
static void lptmr_init(void) {
71-
72+
clock_hal_set_gate(kSimClockModuleLPTIMER, 0, true);
73+
74+
/* Set interrupt handler */
75+
NVIC_SetVector(LPTimer_IRQn, (uint32_t)lptmr_isr);
76+
NVIC_EnableIRQ(LPTimer_IRQn);
77+
78+
/* TODO: check clock manager, due to nonstandard 50 MHz */
79+
//No suitable external oscillator clock -> Use fast internal oscillator (4MHz / divider)
80+
MCG->C1 |= MCG_C1_IRCLKEN_MASK;
81+
MCG->C2 |= MCG_C2_IRCS_MASK;
82+
LPTMR0->PSR = LPTMR_PSR_PCS(0);
83+
switch (MCG->SC & MCG_SC_FCRDIV_MASK) {
84+
case MCG_SC_FCRDIV(0): //4MHz
85+
LPTMR0->PSR |= LPTMR_PSR_PRESCALE(1);
86+
break;
87+
case MCG_SC_FCRDIV(1): //2MHz
88+
LPTMR0->PSR |= LPTMR_PSR_PRESCALE(0);
89+
break;
90+
default: //1MHz or anything else, in which case we put it on 1MHz
91+
MCG->SC &= ~MCG_SC_FCRDIV_MASK;
92+
MCG->SC |= MCG_SC_FCRDIV(2);
93+
LPTMR0->PSR |= LPTMR_PSR_PBYP_MASK;
94+
}
7295
}
7396

7497
void us_ticker_disable_interrupt(void) {
75-
98+
BW_LPTMR_CSR_TIE(0);
7699
}
77100

78101
void us_ticker_clear_interrupt(void) {
@@ -83,14 +106,48 @@ static uint32_t us_ticker_int_counter = 0;
83106
static uint16_t us_ticker_int_remainder = 0;
84107

85108
static void lptmr_set(unsigned short count) {
86-
/* Reset */
87-
109+
HW_LPTMR_CSR_WR(0);
110+
BW_LPTMR_CMR_COMPARE(count);
111+
BW_LPTMR_CSR_TIE(1);
112+
BW_LPTMR_CSR_TEN(1);
88113
}
89114

90115
static void lptmr_isr(void) {
91-
116+
// write 1 to TCF to clear the LPT timer compare flag
117+
BW_LPTMR_CSR_TCF(1);
118+
119+
if (us_ticker_int_counter > 0) {
120+
lptmr_set(0xFFFF);
121+
us_ticker_int_counter--;
122+
123+
} else {
124+
if (us_ticker_int_remainder > 0) {
125+
lptmr_set(us_ticker_int_remainder);
126+
us_ticker_int_remainder = 0;
127+
128+
} else {
129+
// This function is going to disable the interrupts if there are
130+
// no other events in the queue
131+
us_ticker_irq_handler();
132+
}
133+
}
92134
}
93135

94136
void us_ticker_set_interrupt(unsigned int timestamp) {
95-
137+
int delta = (int)(timestamp - us_ticker_read());
138+
if (delta <= 0) {
139+
// This event was in the past:
140+
us_ticker_irq_handler();
141+
return;
142+
}
143+
144+
us_ticker_int_counter = (uint32_t)(delta >> 16);
145+
us_ticker_int_remainder = (uint16_t)(0xFFFF & delta);
146+
if (us_ticker_int_counter > 0) {
147+
lptmr_set(0xFFFF);
148+
us_ticker_int_counter--;
149+
} else {
150+
lptmr_set(us_ticker_int_remainder);
151+
us_ticker_int_remainder = 0;
152+
}
96153
}

workspace_tools/export/uvision4.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
class Uvision4(Exporter):
2222
NAME = 'uVision4'
2323

24-
TARGETS = ['LPC1768', 'LPC11U24', 'KL05Z', 'KL25Z', 'KL46Z', 'K20D5M', 'LPC1347', 'LPC1114', 'LPC11C24', 'LPC4088', 'LPC812', 'NUCLEO_F103RB']
24+
TARGETS = ['LPC1768', 'LPC11U24', 'KL05Z', 'KL25Z', 'KL46Z', 'K64F','K20D5M', 'LPC1347', 'LPC1114', 'LPC11C24', 'LPC4088', 'LPC812', 'NUCLEO_F103RB']
2525

2626
USING_MICROLIB = ['LPC11U24', 'LPC1114', 'LPC11C24', 'LPC812', 'NUCLEO_F103RB']
2727

Lines changed: 204 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,204 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no" ?>
2+
<ProjectOpt xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="project_opt.xsd">
3+
4+
<SchemaVersion>1.0</SchemaVersion>
5+
6+
<Header>### uVision Project, (C) Keil Software</Header>
7+
8+
<Extensions>
9+
<cExt>*.c</cExt>
10+
<aExt>*.s*; *.src; *.a*</aExt>
11+
<oExt>*.obj</oExt>
12+
<lExt>*.lib</lExt>
13+
<tExt>*.txt; *.h; *.inc</tExt>
14+
<pExt>*.plm</pExt>
15+
<CppX>*.cpp</CppX>
16+
</Extensions>
17+
18+
<DaveTm>
19+
<dwLowDateTime>0</dwLowDateTime>
20+
<dwHighDateTime>0</dwHighDateTime>
21+
</DaveTm>
22+
23+
<Target>
24+
<TargetName>mbed FRDM-K20D5M</TargetName>
25+
<ToolsetNumber>0x4</ToolsetNumber>
26+
<ToolsetName>ARM-ADS</ToolsetName>
27+
<TargetOption>
28+
<CLKADS>12000000</CLKADS>
29+
<OPTTT>
30+
<gFlags>1</gFlags>
31+
<BeepAtEnd>1</BeepAtEnd>
32+
<RunSim>1</RunSim>
33+
<RunTarget>0</RunTarget>
34+
</OPTTT>
35+
<OPTHX>
36+
<HexSelection>1</HexSelection>
37+
<FlashByte>65535</FlashByte>
38+
<HexRangeLowAddress>0</HexRangeLowAddress>
39+
<HexRangeHighAddress>0</HexRangeHighAddress>
40+
<HexOffset>0</HexOffset>
41+
</OPTHX>
42+
<OPTLEX>
43+
<PageWidth>79</PageWidth>
44+
<PageLength>66</PageLength>
45+
<TabStop>8</TabStop>
46+
<ListingPath>.\build\</ListingPath>
47+
</OPTLEX>
48+
<ListingPage>
49+
<CreateCListing>1</CreateCListing>
50+
<CreateAListing>1</CreateAListing>
51+
<CreateLListing>1</CreateLListing>
52+
<CreateIListing>0</CreateIListing>
53+
<AsmCond>1</AsmCond>
54+
<AsmSymb>1</AsmSymb>
55+
<AsmXref>0</AsmXref>
56+
<CCond>1</CCond>
57+
<CCode>0</CCode>
58+
<CListInc>0</CListInc>
59+
<CSymb>0</CSymb>
60+
<LinkerCodeListing>0</LinkerCodeListing>
61+
</ListingPage>
62+
<OPTXL>
63+
<LMap>1</LMap>
64+
<LComments>1</LComments>
65+
<LGenerateSymbols>1</LGenerateSymbols>
66+
<LLibSym>1</LLibSym>
67+
<LLines>1</LLines>
68+
<LLocSym>1</LLocSym>
69+
<LPubSym>1</LPubSym>
70+
<LXref>0</LXref>
71+
<LExpSel>0</LExpSel>
72+
</OPTXL>
73+
<OPTFL>
74+
<tvExp>1</tvExp>
75+
<tvExpOptDlg>0</tvExpOptDlg>
76+
<IsCurrentTarget>1</IsCurrentTarget>
77+
</OPTFL>
78+
<CpuCode>14</CpuCode>
79+
<Books>
80+
<Book>
81+
<Number>0</Number>
82+
<Title>Data Sheet</Title>
83+
<Path>DATASHTS\Freescale\K20PB.pdf</Path>
84+
</Book>
85+
<Book>
86+
<Number>1</Number>
87+
<Title>Technical Reference Manual</Title>
88+
<Path>datashts\arm\cortex_m4\r0p1\DDI0439C_CORTEX_M4_R0P1_TRM.PDF</Path>
89+
</Book>
90+
<Book>
91+
<Number>2</Number>
92+
<Title>Generic User Guide</Title>
93+
<Path>datashts\arm\cortex_m4\r0p1\DUI0553A_CORTEX_M4_DGUG.PDF</Path>
94+
</Book>
95+
</Books>
96+
<DllOpt>
97+
<SimDllName>SARMCM3.DLL</SimDllName>
98+
<SimDllArguments></SimDllArguments>
99+
<SimDlgDllName>DCM.DLL</SimDlgDllName>
100+
<SimDlgDllArguments>-pCM4</SimDlgDllArguments>
101+
<TargetDllName>SARMCM3.DLL</TargetDllName>
102+
<TargetDllArguments>-MPU</TargetDllArguments>
103+
<TargetDlgDllName>TCM.DLL</TargetDlgDllName>
104+
<TargetDlgDllArguments>-pCM4</TargetDlgDllArguments>
105+
</DllOpt>
106+
107+
<DebugOpt>
108+
<uSim>0</uSim>
109+
<uTrg>1</uTrg>
110+
<sLdApp>1</sLdApp>
111+
<sGomain>1</sGomain>
112+
<sRbreak>1</sRbreak>
113+
<sRwatch>1</sRwatch>
114+
<sRmem>1</sRmem>
115+
<sRfunc>1</sRfunc>
116+
<sRbox>1</sRbox>
117+
<tLdApp>1</tLdApp>
118+
<tGomain>1</tGomain>
119+
<tRbreak>1</tRbreak>
120+
<tRwatch>1</tRwatch>
121+
<tRmem>1</tRmem>
122+
<tRfunc>0</tRfunc>
123+
<tRbox>1</tRbox>
124+
<sRunDeb>0</sRunDeb>
125+
<sLrtime>0</sLrtime>
126+
<nTsel>14</nTsel>
127+
<sDll></sDll>
128+
<sDllPa></sDllPa>
129+
<sDlgDll></sDlgDll>
130+
<sDlgPa></sDlgPa>
131+
<sIfile></sIfile>
132+
<tDll></tDll>
133+
<tDllPa></tDllPa>
134+
<tDlgDll></tDlgDll>
135+
<tDlgPa></tDlgPa>
136+
<tIfile></tIfile>
137+
<pMon>BIN\CMSIS_AGDI.dll</pMon>
138+
</DebugOpt>
139+
<TargetDriverDllRegistry>
140+
<SetRegEntry>
141+
<Number>0</Number>
142+
<Key>ULP2CM3</Key>
143+
<Name>-O2510 -S0 -C0 -FO15 -FD20000000 -FC800 -FN1 -FF0MK_P128_50MHZ -FS00 -FL020000)</Name>
144+
</SetRegEntry>
145+
<SetRegEntry>
146+
<Number>0</Number>
147+
<Key>CMSIS_AGDI</Key>
148+
<Name>-X"MBED CMSIS-DAP" -UA000000001 -O462 -S0 -C0 -N00("ARM CoreSight SW-DP") -D00(0BC11477) -L00(0) -FO15 -FD20000000 -FC800 -FN1 -FF0MK_P128_50MHZ -FS00 -FL020000</Name>
149+
</SetRegEntry>
150+
</TargetDriverDllRegistry>
151+
<Breakpoint/>
152+
<DebugFlag>
153+
<trace>0</trace>
154+
<periodic>0</periodic>
155+
<aLwin>0</aLwin>
156+
<aCover>0</aCover>
157+
<aSer1>0</aSer1>
158+
<aSer2>0</aSer2>
159+
<aPa>0</aPa>
160+
<viewmode>0</viewmode>
161+
<vrSel>0</vrSel>
162+
<aSym>0</aSym>
163+
<aTbox>0</aTbox>
164+
<AscS1>0</AscS1>
165+
<AscS2>0</AscS2>
166+
<AscS3>0</AscS3>
167+
<aSer3>0</aSer3>
168+
<eProf>0</eProf>
169+
<aLa>0</aLa>
170+
<aPa1>0</aPa1>
171+
<AscS4>0</AscS4>
172+
<aSer4>0</aSer4>
173+
<StkLoc>0</StkLoc>
174+
<TrcWin>0</TrcWin>
175+
<newCpu>0</newCpu>
176+
<uProt>0</uProt>
177+
</DebugFlag>
178+
<LintExecutable></LintExecutable>
179+
<LintConfigFile></LintConfigFile>
180+
</TargetOption>
181+
</Target>
182+
183+
<Group>
184+
<GroupName>src</GroupName>
185+
<tvExp>1</tvExp>
186+
<tvExpOptDlg>0</tvExpOptDlg>
187+
<cbSel>0</cbSel>
188+
<File>
189+
<GroupNumber>1</GroupNumber>
190+
<FileNumber>1</FileNumber>
191+
<FileType>8</FileType>
192+
<tvExp>0</tvExp>
193+
<Focus>0</Focus>
194+
<ColumnNumber>0</ColumnNumber>
195+
<tvExpOptDlg>0</tvExpOptDlg>
196+
<TopLine>1</TopLine>
197+
<CurrentLine>2</CurrentLine>
198+
<bDave2>0</bDave2>
199+
<PathWithFileName>main.cpp</PathWithFileName>
200+
<FilenameWithoutPath>main.cpp</FilenameWithoutPath>
201+
</File>
202+
</Group>
203+
204+
</ProjectOpt>

0 commit comments

Comments
 (0)