Top Banner
ТЕХНИЧЕСКИ УНИВЕРСИТЕТ – СОФИЯ, ФИЛИАЛ ПЛОВДИВ ФАКУЛТЕТ ПО ЕЛЕКТРОНИКА И АВТОМАТИКА По ПВМС Изготвили фак№, гр.: Тонка Танчева 605 277, 31 а Светла Райкова 605 289,31 а Проектиране на LPC2364 Дата: Проверил: Пловдив /гл.ас. др.Петров/
19

LPC2364 Project

Apr 10, 2015

Download

Documents

posnai

LPC2364:
oscillator, Vref, supervisory scheme, voltage regulator, wake-up from power down, input capture, I2C, ADC, RS485, Ethernet, codes
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: LPC2364 Project

ТЕХНИЧЕСКИ УНИВЕРСИТЕТ – СОФИЯ, ФИЛИАЛ ПЛОВДИВ

ФАКУЛТЕТ ПО ЕЛЕКТРОНИКА И АВТОМАТИКА

По ПВМС

Изготвили фак, гр.:

Тонка Танчева 605 277, 31а

Светла Райкова 605 289,31а

Проектиране на LPC2364

Дата: Проверил:

Пловдив /гл.ас. др.Петров/

Page 2: LPC2364 Project

Проектиране на приложения с LPC2364

2

Да се осигури работата на LPC2364 като се проектира:

Външен кристален осциалтор за main oscilator и RTC oscilator;

Етелонно напрежение за ADC;

Осигуряване на reset сигнал;

Регулирано захранващо напрежение;

Следене на захранването;

Събуждане на процесора от power-down режим;

Вход за прихващане на данни;

Аналогв вход за ADC;

Вътрешен интерфейс I2C;

Междусистемен интерфейс RS485;

ETHERNET;

Както и инициализации на използвания хардуер;

Page 3: LPC2364 Project

Проектиране на приложения с LPC2364

3

1. Project.c

#include <targets\LPC2000.h> #include <ctl_api.h> #include <stdio.h> #include "init.h" #include "data.h" int main(void) int cntr = 0; InitPll(); I2C_init(); InitRS485(); PHY_transmitter_init(); ETHERNET_init(); IC_init(); InitADC(); InitPDM(); InitVIC(); ctl_global_interrupts_enable(); while(1) cntr++; return 0;

2. Init.c #include <targets\LPC2000.h> #include <ctl_api.h> #include <stdio.h> #include "init.h" #include "data.h" #define PLL_VECTOR 12 #define PLL_PRIORITY 1 #define EINT0_VECTOR 14 #define EINT0_PRIORITY 2 #define ETHERNET_VECTOR 21 #define ETHERNET_PRIORITY 3 #define RS485_VECTOR 29

Page 4: LPC2364 Project

Проектиране на приложения с LPC2364

4

#define RS485_PRIORITY 4 #define TIMER0_VECTOR 4 #define TIMER0_PRIORITY 5 #define I2C0_VECTOR 9 #define I2C0_PRIORITY 6 #define AD0_VECTOR 18 #define AD0_PRIORITY 7 #define PDM_VECTOR 17 #define PDM_PRIORITY 8

extern void IC_init(void) PINSEL3 = 0x0CC00000; // set CAP0.1& MAT0.1 T0TCR = 0x02; // clear Timer/Counter T0CTCR = 0x05; // choose: Couner Mode and CAP0.1 T0CCR = 0x0; //CAP0.1 T0MR0 = 0x7530; //set value, to compares with TC T0IR = 0x01; // reset the interrupt T0MCR = 0x03;//interrupts on MR0, when MR0==TC; TC will be reset when MR0==TC T0TCR = 0x01; // set Timer/Counter ctl_set_isr(TIMER0_VECTOR ,TIMER0_PRIORITY,CTL_ISR_TRIGGER_FIXED,IC0_ISR,0); ctl_unmask_isr(TIMER0_VECTOR);

extern void I2C_init(void) PINSEL1 = 0x03C00000; // set I2C I2C0CONSET = 0x4; // only I2EN=1- enable I2C, STA=0,STO=0,SI=0,AA=0 I2C0SCLH = 0x42; //PCLK=16MHz -> I2Cfreg=320kHz -> I2C0SCLH + I2C0SCLL = 50; //I2C0SCLH = 42; I2C0SCLL = 0x08; // I2C0SCLL = 8; ctl_set_isr(I2C0_VECTOR,I2C0_PRIORITY,CTL_ISR_TRIGGER_FIXED,I2C0_ISR,0); ctl_unmask_isr(I2C0_VECTOR);

extern void ETHERNET_init(void) PINSEL2 = 0x50150105; //set ENET_TxD0,ENET_TxD1,ENET_TxEN,ENET_CRS,ENET_RxD0,ENET_RxD1,ENET_RxER,ENET_REF_CLK PINSEL2 = 0x05; // set ENET_MDC,ENET_MDIO MAC1 = 0x03; //Resieve Enable-allow recieve frame,pass all receive frames disable all RESET MAC2 = 0x0A; //Frame Lenght checking, Delayed CRC SUPP = 0x0100; //speed 100Mbps mode MCFG = 0x0C1; //CLK select 60MHz/2,5MHz=24min-> 60/28=2,14<2,5MHz MCMD = 0x02; // scan ???

Page 5: LPC2364 Project

Проектиране на приложения с LPC2364

5

Command = 0x0233; //Tx,Rx-enable; TX,RxReset RxDescriptor = 0xBF; // 1538:bBytes=192, 192-1=191,191=BF TxDescriptor = 0xBF; PHY_transmitter_init(); ctl_set_isr(ETHERNET_VECTOR,ETHERNET_PRIORITY,CTL_ISR_TRIGGER_FIXED,ETHERNET_ISR,0); ctl_unmask_isr(ETHERNET_VECTOR );

extern void PHY_transmitter_init(void) BMCR = 0x2000; //Speed 100Mbps,Half-Duplex Mode RBR = 0x020; // choose RMII mode, RMII(rev1.2)

extern void InitPll(void) long see; /******* DISCONNECT & DISABLE PLL ****************/ PLLCON |= 0xfd; //disconnect PLL PLLFEED = 0xaa; //confirm!! PLLCON |= 0xfe; //disable PLL PLLFEED = 0xaa; //confirm!! /******************** INIT PLL *******************/ void again(void) CLKSRCSEL = 0x0; //CLK SOURCE -- MAIN OSC PLLCFG = 0x0002001f; //(M-1)=31 | (N-1)=1 PLLFEED = 0x55; //confirme!! PLLCON = 0x01; //PLL ENABLE PLLFEED = 0xaa; //confirme!! CCLKCFG = 0x05; //CPU CLK DIVIDER-1=5 USBCLKCFG = 0x07; //USB CLK DIVIDER-1=7 //IRCTRIM = 0x ; //PCLKSEL0 = 0x ; //PCLKSEL1 = 0x ; PCON = 0x1c; // NORMAL OPERATION | BROWN-OUT DISABLED INTWAKE = 0x0001; // WAKE UP FROM POWER-DOWN WITH !EINT0 PCONP = 0x67c91ade; //ENABLES ONLY: TIMERS;UART;PWM;I2C;GPDMA;ENET;ADC

Page 6: LPC2364 Project

Проектиране на приложения с LPC2364

6

see=PLLSTAT; if(see == 0x0501001f) PLLCON &= 0x02; //PLL CONNECT PLLFEED = 0xaa; //confirme!! else again();

extern void InitADC(void) PINSEL1 &= 0x00004000; //NOT GP PINMODE1 &= 0x00009000; //NO PULL-UP/PULL-DOWN R PCONP &=0x00001000; //ADC power survice again AD0CR = 0x00010301; //enable ADC0.0 | ADCclk 4MHz | BURST mode | 10bit | operational AD0INTEN = 0x00000001; //interrupt enable channel ADC0.0 ctl_set_isr(AD0_VECTOR,AD0_PRIORITY,CTL_ISR_TRIGGER_FIXED,AD0_ISR,0); ctl_unmask_isr(AD0_VECTOR);

extern void InitRS485(void) U3DLL = 0xc7; //BR22727 U3DLM = 0x58; //BR22727 U3FCR = 0x87; //ENABLE FIFO | CLR BUFF RX/TX | 8 CHARACTERS U3LCR = 0x9B; //8BIT | 1STOP BIT | PARITY - EVEN | DISABLE TIME-OUT U3ACR = 0x00000001; //AUTO-BOUD ENABLED U3FDR = 0x00000010; //NO DIVIDER OR MULTIPLIER U3IER = 0x00000103; //ENABLE INTERRUPT: RECIEVE;TRANSMIT;END AUTO-BAUD IO0DIR = 0x00000008; //P0.4 - DIR=OUTPUT if(U3LSR || 0x9e) printf("ERROR CONNECTION : lost data error; parity error; framing error; break int error \n"); else if(U3LSR || 0x90) IO0PIN = 0x00000008; //P0.4 - DIR HIGH LEVEL - TRANSMIT printf("Transmiting \n");

Page 7: LPC2364 Project

Проектиране на приложения с LPC2364

7

if(U3LSR || 0x01) IO0PIN = 0x00000000; //P0.4 - DIR LOW LEVEL - RECIEVE printf("SLAVE MODE - Recieving \n"); ctl_set_isr(RS485_VECTOR,RS485_PRIORITY,CTL_ISR_TRIGGER_FIXED,RS485_ISR,0); ctl_unmask_isr(RS485_VECTOR);

extern void InitEINT0(void) U0DLL = 0xc7; //BR22727 U0DLM = 0x58; //BR22727 U0FCR = 0x87; //ENABLE FIFO | CLR BUFF RX/TX | 8 CHARACTERS U0LCR = 0x9B; //8BIT | 1STOP BIT | PARITY - EVEN | DISABLE TIME-OUT U0ACR = 0x00000001; //AUTO-BOUD ENABLED U0FDR = 0x00000010; //NO DIVIDER OR MULTIPLIER U0IER = 0x00000103; //ENABLE INTERRUPT: RECIEVE;TRANSMIT;END AUTO-BAUD VICIntEnClr = 0xffffffff; //DISABLE INTERRUPTS EXTMODE = 0x00; //LEVEL SENSITIVE EXTPOLAR = 0x00; //LOW LEVEL SENSITIVE EXTINT = 0x01; //ENABLE EINT0 ctl_set_isr(EINT0_VECTOR,EINT0_PRIORITY,CTL_ISR_TRIGGER_FIXED,EINT0_ISR,0); ctl_unmask_isr(EINT0_VECTOR);

extern void InitPDM(void) PINSEL0 = 0x00000000; //P0.5 GPIO IO0DIR = 0x00000010; //P0.5 input IO0IntEnF = 0x00000020; //P0.5 falling edge interrupt enable ctl_set_isr(PDM_VECTOR,PDM_PRIORITY,CTL_ISR_TRIGGER_FIXED,PDM_ISR,0); ctl_unmask_isr(PDM_VECTOR);

extern void InitVIC(void) VICSoftClear = 0x20245201; //clear interrupt on: TIMER0;I2C0;PLL;EINT0;AD0;ETHERNET;UART3

Page 8: LPC2364 Project

Проектиране на приложения с LPC2364

8

VICSoftInt = 0x20245210; //force IRQ on TIMER0;I2C0;PLL;EINT0;AD0;ETHERNET;UART3 VICIntEnable = 0x20245210; //ENABLE INTERRUPT ON: TIMER0;I2C0;PLL;EINT0;AD0;ETHERNET;UART3 VICIntSelect = 0x0; //IRQ ASSIGNED VICSWPriorityMask = 0x0; //not-masked

3. Init.h #ifndef init #define init extern void IC_init(void); extern void I2C_init(void); extern void InitPll(void); extern void InitADC(void); extern void InitRS485(void); extern void InitVIC(void); extern void ETHERNET_init(void); extern void PHY_transmitter_init(void); extern void InitEINT0(void); extern void InitPDM(void); #endif

4. Data.c #include <targets\LPC2000.h> #include <ctl_api.h> #include <stdio.h> #include "data.h" #include "init.h"

extern void IC0_ISR(void) int see; int see_all[128][128]; int *go_see; go_see = &see_all[0][0]; *go_see = 1010; T0IR = 0x01; ctl_mask_isl(4);

Page 9: LPC2364 Project

Проектиране на приложения с LPC2364

9

extern void I2C0_ISR(void) int see; extern int see_all[128][128]; int *go_see; go_see = &see_all[0][0]; *go_see = 0xA0; //control code + Write bit ctl_mask_isr(9);

extern void ETHERNET_ISR(void) LEDCR = 0x07; // active 3 LEDs LEDCR = 0x06; //turn off 1 LEDCR = 0x0; ctl_mask_isr(21);

extern void AD0_ISR(void) void go_out(void) ctl_mask_isr(AD0_VECTOR); if(AD0DR0|0x8000000) //done and ready? if((AD0DR0|0x0000ffff) == 0) //Ain/Vref<=0 printf("Ain/Vref <=0 /n"); go_out(); if(AD0DR0|0x000003ff) //Ain>=Vref printf("Ain>=Vref /n"); go_out(); else printf("NOT DONE OR DATA LOST /n"); ctl_mask_isr(18);

Page 10: LPC2364 Project

Проектиране на приложения с LPC2364

10

extern void RS485_ISR(void) if(U3LSR || 0x9e) printf("ERROR CONNECTION : lost data error; parity error; framing error; break int error \n"); else if(U3LSR || 0x60) //Transmiting? IO0PIN = 0x00000008; //P0.4 - DIR=HIGH LEVEL - TRANSMIT printf("Transmiting \n"); //yes! if(U3LSR || 0x01) //Recieving? IO0PIN = 0x00000000; //P0.4 - DIR=LOW LEVEL - RECIEVE printf("Recieving \n"); //yes ctl_mask_isr(29);

extern void EINT0_ISR(void) InitPll(); ctl_mask_isr(14);

extern void PDM_ISR(void) EXTWAKE0 = 0x0001; //ENABLE EINT0 PCON =0x0e; //POWER DOWN MODE !! ctl_mask_isr(17);

5. Data.h #ifndef data #define data

Page 11: LPC2364 Project

Проектиране на приложения с LPC2364

11

extern void IC0_ISR(void); extern void I2C0_ISR(void); extern void ETHERNET_ISR(void); extern void AD0_ISR(void); extern void RS485_ISR(void); extern void EINT0_ISR(void); extern void PLL_ISR(void); extern void PDM_ISR(void); #endif

Page 12: LPC2364 Project

Проектиране на приложения с LPC2364

12

Page 13: LPC2364 Project

Проектиране на приложения с LPC2364

13

Page 14: LPC2364 Project

Проектиране на приложения с LPC2364

14

Page 15: LPC2364 Project

Проектиране на приложения с LPC2364

15

Page 16: LPC2364 Project

Проектиране на приложения с LPC2364

16

Page 17: LPC2364 Project

Проектиране на приложения с LPC2364

17

Page 18: LPC2364 Project

Проектиране на приложения с LPC2364

18

6. Спецификация.

на част Чип Стойност Производител Корпус Забележка

IC1 LPC2364 HBD100 NXP LQFP100 Микропроцесор IC2 MAX804 _MJA MAXIM 8 CERDIP Supervisory sh. IC3 ADR291 Analog Devices SO-8 Referens voltage IC4 LM2574 ON Semiconductor PDIP–8 Buck regulator IC5 3N253 Vishay KBPM-4 Bridge rectifier IC6 MPX12D Freescale Semiconductor CASE 344-15 Sensor IC7 LTC2053 Linear Semiconductor ИУ IC8 24LC32A Microchip SOT-23 EEPROM IC9 IC10 M AX3362AKA-T MAXIM 8 SOT23- 8 RS485 IC11 IC12 DP83848C National Semiconductor 48-pin LQFP ETHERNET IC13 H1102 Pulse SO-16DW JP1 JP2 EINT0 JP2 JP2 DBGEN

con1 4R20P JTAG Q1 GF1200008 12MHz eCERA GF DIP 49SS XTAL Q2 DS32kHz 32.768kHz MAXIM 14 DIP XTAL L1 1,5mH 0204/5 L2 330uH 0204/5 D2 1N5819 DO13M

D3-4 1N4004 DIODS D5-7 LED

C1,C2, C8

22pF C025-024X044

C3-4 18pF C025-024X044 C5-7 68uF C025-024X044 C8 220uF 085CS_1AR

C9,C14-17 C29-30

0,1uF C025-024X044

C10,C23,C24 100nF C025-024X044 C11,C22,C25,

C28 10uF 085CS_1AR

C12-13 C19-21 C26-27

1uF 085CS_1AR

R1 1,7kΩ 0204V R2,R9 1kΩ 0204V

R3,R10,R15, R20-27,R36-37

10kΩ 0204V R15-TRIMER

R4-7 49.9Ω 0204V R8 2,7kΩ 0204V

R11,R28 100Ω 0204V R12-13 2kΩ 0204V

R14 120Ω 0204V

Page 19: LPC2364 Project

Проектиране на приложения с LPC2364

19

R16-18 4.87kΩ 0204V R19,R30,R33,

R34 2,2kΩ 0204V

R29 33Ω 0204V R31,R33,R35 110Ω 0204V

R14250 3,6V Battery