Jag har ett antal "standard-filer" som tar hand om allt det tunga. Detta medför självklart att jag måste ställa en del saker när jag skapar ett nytt projekt, det varierar ju lite vilka funktioner som ska aktiveras i de olika projekt vilket betyder att olika interrupts ska/inte ska definieras, portpinnar ska vara input eller output osv.
I projektet definierar jag därför ett antal värden den "generella" definitionsdel, alltså är de definierat i systemet när den kompilerar:
USE_HOCO50MHZ
USE_RS232_B
USE_RS485
USE_CMT0
USE_CMT2
I min "Controller_Unit_200_Hardware.h" har jag en sektion som väljer hastighet på den interna oscillator:
#define PCKD_DIV 6
#if defined(USE_HOCO32MHZ)
#define CPU_CLK 32000000L
#define HOCO_SPEED 0 /* =32,000MHz */
#define PCKB_DIV 1
#define PCLK (CPU_CLK / 2L) /* 16,000MHz */
#elif defined(USE_HOCO36MHZ)
#define CPU_CLK 36864000L
#define HOCO_SPEED 1 /* =36,864MHz */
#define PCKB_DIV 2
#define PCLK (CPU_CLK / 4L) /* 9,216MHz */
#elif defined(USE_HOCO40MHZ)
#define CPU_CLK 40000000L
#define HOCO_SPEED 2 /* =40,000MHz */
#define PCKB_DIV 2
#define PCLK (CPU_CLK / 4L) /* 10,000MHz */
#elif defined(USE_HOCO50MHZ)
#define CPU_CLK 50000000L
#define HOCO_SPEED 3 /* =50,000MHz */
#define PCKB_DIV 2
#define PCLK (CPU_CLK / 4L) /* 12,500MHz */
#else
#error ERROR: HOCO clock not selected!!!
#endif
När jag sitter i IDE't (e2 studio, en Eclipse-version) är de röda raderna gråtonade (alltså inaktiva) medan de svart/vita är just svart/vita.
Jag använder detta sätt på en hel del projekt och det har varit lite knas med det ibland men normalt är felet att PCLK inte kan hittas. Eller exakt: "Symbol 'PCLK' could not be resolved". I filen finns ingen annan förekomst av "pclk".
Raden som hänvisas till är:
Kod: Markera allt
void System_Timer_Initiate(void)
{
SYSTEM.PRCR.WORD = 0xA502; // Open lock
MSTP(CMT0) = 0; // Timer module stop state cancelled
SYSTEM.PRCR.WORD = 0xA500; // Lock up again!
CMT0_Stop(); // Kill Run-flag
CMT0.CMCR.WORD = 0x00C0; // Enable compare interrupt & set PCLK:8
CMT0.CMCNT = 0x0000; // Clear the count
CMT0.CMCOR = ((PCLK / 8) / SYSTEM_CLOCK_SPEED) - 1; // Should give 1000Hz a.k.a. 1ms <== Denna raden är problemet i
IPR(CMT0,CMI0) = Int_Prio_System_Timer; // Interrupt priority
IEN(CMT0,CMI0) = true; // Enable interrupts
CMT0_Start(); // Activate Run-flag
}
Hur tusan gör man så att den fattar?
EDIT:
Hade ta mig tusan skrivit fel...
Och sedan upptäckte jag att felet har försvunnit! Jag har inte gjort något annorlunda än förut - dock kan jag ha låtit IDE't stå ett tag med den fil framme medan jag grejade något annat.
Eclipse i all ära, det har många bra funktioner - men sporadisk funktionalitet är INTE önskvärd!