📄 main.c
字号:
/* *********************************************************
Function declarations
********************************************************* */
void Initialize(void);
void feed(void);
void IRQ_Routine (void) __attribute__ ((interrupt("IRQ")));
void FIQ_Routine (void) __attribute__ ((interrupt("FIQ")));
void SWI_Routine (void) __attribute__ ((interrupt("SWI")));
void UNDEF_Routine (void) __attribute__ ((interrupt("UNDEF")));
/**********************************************************
Header files
**********************************************************/
#include "lpc214x.h"
/**********************************************************
Global Variables
**********************************************************/
int q; // global uninitialized variable
int r; // global uninitialized variable
int s; // global uninitialized variable
short h = 2; // global initialized variable
short i = 3; // global initialized variable
char j = 6; // global initialized variable
/**********************************************************
MAIN
**********************************************************/
int main (void) {
long j; // loop counter (stack variable)
static int a,b,c; // static uninitialized variables
static char d; // static uninitialized variables
static int w = 1; // static initialized variable
static long x = 5; // static initialized variable
static char y = 0x04; // static initialized variable
static int z = 7; // static initialized variable
const char *pText = "The Rain in Spain";
// Initialize the system
Initialize();
// set io pins for led P0.10
SCS = 0x03; // select the "fast" version of the I/O ports
FIO0DIR |= 0x00000400; // pin P0.10 is an output, everything else is input after reset
FIO0SET = 0x00000400; // led off
FIO0CLR = 0x00000400; // led on
// endless loop to toggle the red LED P0.7
while (1) {
for (j = 0; j < 5000000; j++ ); // wait 500 msec
FIO0SET = 0x00000400; // red led off
for (j = 0; j < 5000000; j++ ); // wait 500 msec
FIO0CLR = 0x00000400; // red led on
}
}
/**********************************************************
Initialize
**********************************************************/
#define PLOCK 0x400
void Initialize(void) {
// Setting the Phased Lock Loop (PLL)
// ----------------------------------
//
// Olimex LPC-P2148 has a 12.0000 mhz crystal
//
// We'd like the LPC2148 to run at 60 mhz (has to be an even multiple of crystal)
//
// According to the Philips LPC2148 manual: M = cclk / Fosc where: M = PLL multiplier (bits 0-4 of PLLCFG)
// cclk = 60000000 hz
// Fosc = 12000000 hz
//
// Solving: M = 60000000 / 12000000 = 5
//
// Note: M - 1 must be entered into bits 0-4 of PLLCFG (assign 4 to these bits)
//
//
// The Current Controlled Oscilator (CCO) must operate in the range 156 mhz to 320 mhz
//
// According to the Philips LPC2148 manual: Fcco = cclk * 2 * P where: Fcco = CCO frequency
// cclk = 60000000 hz
// P = PLL divisor (bits 5-6 of PLLCFG)
//
// Solving: Fcco = 60000000 * 2 * P
// P = 2 (trial value)
// Fcco = 60000000 * 2 * 2
// Fcc0 = 240000000 hz (good choice for P since it's within the 156 mhz to 320 mhz range)
//
// From Table 22 (page 34) of Philips LPC2148 manual P = 2, PLLCFG bits 5-6 = 1 (assign 1 to these bits)
//
// Finally: PLLCFG = 0 01 00100 = 0x24
//
// Final note: to load PLLCFG register, we must use the 0xAA followed 0x55 write sequence to the PLLFEED register
// this is done in the short function feed() below
//
// Setting Multiplier and Divider values
PLLCFG=0x24;
feed();
// Enabling the PLL */
PLLCON=0x1;
feed();
// Wait for the PLL to lock to set frequency
while(!(PLLSTAT & PLOCK)) ;
// Connect the PLL as the clock source
PLLCON=0x3;
feed();
// Enabling MAM and setting number of clocks used for Flash memory fetch (4 cclks in this case)
MAMCR=0x2;
MAMTIM=0x4;
// Setting peripheral Clock (pclk) to System Clock (cclk)
VPBDIV=0x0;
}
void feed(void)
{
PLLFEED=0xAA;
PLLFEED=0x55;
}
/* Stubs for various interrupts (may be replaced later) */
/* ---------------------------------------------------- */
void IRQ_Routine (void) {
while (1) ;
}
void FIQ_Routine (void) {
while (1) ;
}
void SWI_Routine (void) {
while (1) ;
}
void UNDEF_Routine (void) {
while (1) ;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -