430F22X 430F22X...1...2 1.1 MSP430F2274... 2 1.1.1...2 1.1.2...3 1.1.3...3 1.1.4...5 1.2... 5 1.3...6 MSP430 (IAR)...7 2.1 F:/...7 2.2...7 2.3 IAR3.41A...7 1...7 2*.S43/*.C... 8 3...9 4...11 5...11...12 I/O... 13...15 FLASH...18...22 16 Timer_A...25 ADC10... 30 OA...36 USCI...42 C... 53 I/O... 53...54 FLASH...56...60 16 Timer_A...63 ADC10... 67 OA...71 USCI...76 1
1.1 MSP430F2274 1.1.1 1.8~3.6V 1 250µA @1MHz,2.2V; 2 0.7µA; 3RAM 0.1µA 45 1µs 62.5n 116MHZFLASH A / 16 Timer_ATimer_B 1 2/ 3 SPI 4I2C 5LIN 10 200-ksps A/D 2 OA0OA1 Brownout Detector) FLASH 32KBRAM 1KB Bootstrap Loader) 1Spy-Bi-Wire 24-Wire JTAG 1.1.2 MSP430F2274 1.1 2
1.1 MSP430F2274 1.1.3 MSP430F2274 38-Pin SSOP 40-Pin QFN, 1.2 1.3 1.2 MSP430F2274 38-Pin SSOP 3
1.3 MSP430F2274 40-Pin QFN MSP430F449 1.1.4 1.4 2274 4
1.2 1.3 1 5
MSP430 (IAR) 1 2.1 6
2.4 2.2 2*.S43/*.C 2.3 7
3 LSD SCIENCE & TECHNOLOGY CO., LTD. WWW.LIERDA..COM 2.4 CategoryGeneral Options,TargetDevice CategoryDebugger 2.5driver simulatorfet Debugger FET DebuggerFET Debugger 2.6 ConnectionLpt 8
2.5 2.6 9
4 10
IAR 3.41A MSP430 MSP430 MSP430 IAR INC P1.0 (1) MOV.B #01H, &22H MOV.B #01H, &21H #include "msp430x44x.h" MOV.B #BIT0, &P1DIR MOV.B #BIT0, &P1OUT (2)C #include "msp430x22x4.h" P1DIR = 0x01 P1OUT = 0x01 P1DIR 22HP1OUT 21H msp430x22x4.h BIT0 #define BIT0 (0x0001), C msp430x22x4.h msp430x22x4.h INC 11
I/O LED 2274 P1.0 LED LED P1.0 P1.0OUT=0,LED, LED ; 1 LED 2 3 NAME main PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL MOV.B #BIT0,&P1DIR ;P1.0 MOV.B #BIT0,&P1OUT mainloop MOV.W #50000,R4 ; 12
wait DEC.W R4 JNZ wait XOR.B #BIT0,&P1OUT ;P1.0 LED / JMP mainloop END main 13
2274 2274 XTAL1VLODCO MCLKSMCLK ACLK 12274DCO 2 Clock_def.h I/OClock_def.h DCO_FREQUENCY DCO 1MHZ8MHZ12MHZ 16MHZACLK_VLOCLK ACLK VLO 32768 SMCLK_LFC SMCLK ACLK DCO MCLK_XT2_OR_LFC MCLK ACLK DCO 1 22274 \example_code\2274_asm\clock_ctl 14
NAME main PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; #if (DCO_FREQUENCY==1) MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL #elif (DCO_FREQUENCY==8) MOV.B &CALBC1_8MHZ,&BCSCTL1 ; DCO 8MHZ MOV.B &CALDCO_8MHZ,&DCOCTL #elif (DCO_FREQUENCY==12) MOV.B &CALBC1_12MHZ,&BCSCTL1 ; DCO 12MHZ MOV.B &CALDCO_12MHZ,&DCOCTL #elif (DCO_FREQUENCY==16) MOV.B &CALBC1_16MHZ,&BCSCTL1 ; DCO 16MHZ MOV.B &CALDCO_16MHZ,&DCOCTL #endif BIS.B #BIT4,&P1SEL ;P1.4 SMCLK BIS.B #BIT4,&P1DIR ;P2.1 SMCLK,P2.0 ACLK BIS.B #BIT0+BIT1,P2SEL BIS.B #BIT0+BIT1,P2DIR #ifdef ACLK_VLOCLK BIS.B #LFXT1S1,&BCSCTL3 ;ACLK VLO #endif #ifdef SMCLK_LFC ;SMCLK LFC(LFXT1CLK VLOCLK ACLK_VLOCLK ) BIS.B #SELS,&BCSCTL2 #endif #ifdef MCLK_XT2_OR_LFC ;MCLK BIS.B #SELM1,&BCSCTL2 #endif mainloop JMP mainloop 15
END main 16
FLASH FLASH 2274FLASH FLASH A FLASH VCC DATA SHEET 12xxFLASH (2274 32KB+256byte) (2) MEMORY 01000H FALSH ALOCK 4xx FLASH A A 1 17
22274 \example_code\2274_asm\flash_rw #define SEGD_START 0x1000 ; D #define SEGC_START 0x1040 ; C NAME main PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL MOV.W #SEGD_START,R4 ; segd R4, CALL #erase_seg ; CALL #write_segd ; MOV.W #SEGC_START,R4 ; segc R4, CALL #erase_seg 18
CALL #copy_d_to_c ; CALL #sega_operation ; A, SEGA mainloop JMP mainloop erase_seg MOV.W #FWKEY+FSSEL1+FN1,&FCTL2 ;flash SMCLK,f(FTG)=SMCLK/3 MOV.W #FWKEY,&FCTL3 ;LOCK 0 MOV.W #FWKEY+ERASE,&FCTL1 ; CLR.W 0(R4) ; flash MOV.W #FWKEY+LOCK,&FCTL3 ; LOCK RET write_segd MOV.W #FWKEY,&FCTL3 ;LOCK 0 MOV.W #FWKEY+WRT,&FCTL1 ;flash MOV.B #00H,R5 ; write_loop MOV.B R5,0(R4) ; INC.B R5 INC.W R4 CMP.W #1040H,R4 JNE write_loop MOV.W #FWKEY+LOCK,&FCTL3 ; LOCK RET copy_d_to_c MOV.W #FWKEY,&FCTL3 MOV.W #FWKEY+WRT,&FCTL1 MOV.W #SEGD_START,R5 copy_loop ; MOV.B @R5+,0(R4) INC.W R4 CMP.W #1080H,R5 JNE copy_loop MOV.W #FWKEY+LOCK,&FCTL3 RET sega_operation ; LOCKA, A 19
BIT #LOCKA,&FCTL3 ; LOCKA JZ sega_unlock ;LOCKA 0? MOV #FWKEY+LOCKA,&FCTL3 ; LOCKA 0 sega_unlock ; LOCKA, A BIT #LOCKA,&FCTL3 ; LOCKA JNZ segalocked MOV #FWKEY+LOCKA,&FCTL3 segalocked RET END main 20
1 2 1 2 3 4 5 WDT 1 WDT WDTTMSEL=1 WDTSSEL WDTISx SOURCE/32768(WDTISx=00)SOURCE/8192(WDTISx=01) SOURCE/512(WDTISx=10)SOURCE/64(WDTISx=11) P1.0 LED 2 WDT WDTTMSEL=0 IFG1 WDTIFG PUC WDTIFG PUC WDTIFG WDT WDTIFG LED 1 32274 \example_code\2274_asm\wdt_operation\wdt_timer NAME main PUBLIC main 21
;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main ORG 0FFF4h ; DC16 wdt_timer RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL ;, ACLK, ACLK/32768(WDTISx=0) MOV.W #WDTPW+WDTTMSEL+WDTSSEL+WDTCNTCL,&WDTCTL BIC.B #BIT0,&P1OUT MOV.B #BIT0,&P1DIR ; P1.0(led) BIS.B #WDTIE,&IE1 ; WDT EINT ; mainloop BIS.B #LPM3,SR ; LPM3,ACLK(WDT ) wdt_timer ; XOR.B #BIT0,P1OUT ;P1.0 RETI END main 1 22
22274 \example_code\2274_asm\wdt_operation\wdt_wdt 23
16 Timer_A 1 A 2 A 3 A PWM 1 Timer_A 2 Timer_A 3 Timer_A 3 / 8 PWM 4 Timer_A 5 Timer_A 6 Time_A 1 A Timer_A CCR1 50000 SMCLK P1.0 LED 2 A Timer_A CCR2 ACLK CCR2 SMCLK R7 3APWM Timer_A SMCLK=32768*32, OUTMOD_7Rset/Set CCR0=512,CCR1=384, CCR2=128 PWM 512/32768*32TA1 384512-384=21TA2 12 P1.2P1.3 A 1 24
22274 \example_code\2274_asm\ta_operation\ta_1 25
A 1 22274 \example_code\2274_asm\ta_operation\ta_2 26
PWM 1 22274 \example_code\2274_asm\ta_operation\ta_3 27
28
ADC10 1ADC10 2ADC10 1 ADC10 2 ADC10 3 ADC10 4 ADC10 6 ADC10 5 ADC 1ADC10 ADC10 ADC10SC AD ADC10MEM, V(temp)=0.00355*TempC+0.986, AD 1.5V Tc=(0D34h*AD_value-0457h*800h)>>13, AD_value AD R6, 2ADC10ADC10 TA.OUT1ADADC10MEM ad_value,ad ADC10 1 22274 \example_code\2274_asm\adc10_operation\adc10_sch_st NAME main 29
PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main ORG 0FFEAh DC16 adc_isr RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL MOV.W #INCH_10,&ADC10CTL1 ; 10, MOV.W #REFON+SREF_1,&ADC10CTL0 ; 1.5V, ; ADC10, 64 ADC10CLK, ADC10 BIS.W #ADC10ON+ADC10SHT_3+ADC10IE,&ADC10CTL0 BIS.W #ENC+ADC10SC,&ADC10CTL0 ; AD EINT ; BIS.W #CPUOFF,SR ; 0 MOV.W #0D34h,R5 ;0D34*AD_value MOV.W #0,R6 ;R6 MOV.W #0,R7 ;R7 add_loop ADD.W R4,R6 JNC next NC.W R7 next DEC.W R5 JNZ add_loop left_mov MOV.W #0457h,R8 ;0457*800h MOV.W #0,R9 MOV.B #11,R10 RLA.W R8 ;R8 RLC.W R9 ;R9 DEC.B R10 JNZ left_mov 30
SUB.W R8,R6 ;0D34h*AD_value-0457h*800h SUBC.W R9,R7 ;(0D34h*AD_value-0457h*800h)>>13 MOV.B #13,R10 rig_mov RRA.W R7 RRC.W R6 DEC.B R10 JNZ rig_mov ; R6 mainloop BIS.W #CPUOFF,SR ; 0 NOP adc_isr; MOV.W &ADC10MEM,R4 ; AD R4 NOP BIC.W #CPUOFF,0(SP) RETI END main ADC10 1 31
22274 \example_code\2274_asm\adc10_operation\adc10_sch_rt - ADCDeltaOn EQU 3; AD AD +ADCDeltaOn,P1.0 - NAME main PUBLIC main - ; MSP430F22x - ORG 0FFFEh DC16 main ORG 0FFEAh ;ADC10 DC16 adc10_isr ORG 0FFF2h ;TIMER_A1 DC16 ta0_isr RSEG CODE ; 32
main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL ; AD 4, 10,AD TA.OUT1, MOV.W #ADC10DIV_3+INCH_10+SHS_1+CONSEQ_2,&ADC10CTL1 ; 2.5V,,AD,, AD ( AD ) MOV.W #SREF_1+ADC10SHT_3+REF2_5V+ADC10IE+REFON+ADC10ON,&ADC10CTL0 MOV.W #30,&TACCR0 ; BIS.W #CCIE,&TACCTL0 ;CCR0 MOV.W #TACLR+MC_1+TASSEL_2,&TACTL;TA, smclk BIS.W #LPM0+GIE,SR ; 0, BIC.W #CCIE,&TACCTL0 ;CCR0 DINT ; BIS.W #ENC,&ADC10CTL0 ;AD MOV.W #OUTMOD_4,&TACCTL1 ;CCR1 4, TAR=0, MOV.W #TASSEL_2+MC_2,&TACTL ;TA,smclk ADC_wait BIT.W #ADC10IFG,&ADC10CTL0 ; JZ ADC_wait MOV.W &ADC10MEM,R4 ; AD ADD.W #ADCDeltaOn,R4 ; AD ADCDeltaOn CLR.B &P1OUT BIS.B #01h,&P1DIR ; mainloop BIS.W #LPM0+GIE,SR ; 0, NOP ; - ta0_isr; ISR for TACCR0 - CLR.W &TACTL ;TA BIC.W #LPM0,0(SP) ; RETI - adc10_isr; - CMP.W R4,&ADC10MEM ; AD AD +ADCDeltaOn,P1.0 JLO adc_isr_1 BIS.B #01h,&P1OUT RETI adc_isr_1 BIC.B #01h,&P1OUT ; p1.0 RETI END main 33
1ADC10, 2ADC10 3 34
OA 1OA 2 2OA 3 3OA 4 4OA 45 1 OA 2 OA 3 4 OA 1OA 2 OA0 2(unity gain)p2.0 (0~AVCC )P2.1 ( AVCC) 2274 AVss OAFBR P2.0,, 2OA 3 OA0 3(comparator)P2.0 (0~Vcc) AVss OAFBR p2.0,, 3OA 4 OA0 4non_inverting)P2.0 ( )P2.1 ( AVCC) AVss 4OA 45 OA0 4, OA1 5,P2.0 OA0 () P2.3 OA1 ( AVCC) AVss, OA1 OA0 OAFBRx AD, OA 2 1 22274 \example_code\2274_asm\oa_operation\oa_m2 NAME main PUBLIC main 35
;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL BIS.B #BIT0+BIT1,&P2SEL ;P2.0,2.1 BIS.B #BIT1,&P2OUT ;p2.1,oa0 ; OA0, 2.4 MOV.B #OAP_0+OAPM_3+OAADC1,&OA0CTL0 ;OAP OA0I0, fast, A1,A3 A5 MOV.B #OAFBR_1+OAFC_2,&OA0CTL1 ;R2/R1=4R/16R, 4R ;MOV.B #OAFBR_2+OAFC_2,&OA0CTL1 ;R2/R1=8R/8R, 8R ;MOV.B #OAFBR_3+OAFC_2,&OA0CTL1 ;R2/R1=10R/6R, 10R ;MOV.B #OAFBR_4+OAFC_2,&OA0CTL1 ;R2/R1=12R/4R, 12R ;MOV.B #OAFBR_5+OAFC_2,&OA0CTL1 ;R2/R1=13R/3R, 13R ;MOV.B #OAFBR_6+OAFC_2,&OA0CTL1 ;R2/R1=14R/2R, 14R ;MOV.B #OAFBR_7+OAFC_2,&OA0CTL1 ;R2/R1=15R/1R, 15R NOP BIS.B #LPM3,SR NOP END main OA 3 12274 \example_code\2274_asm\oa_operation\oa_m3 2 NAME PUBLIC main main 36
;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL BIS.B #BIT0+BIT1,&P2SEL ;P2.0,2.1 BIS.B #BIT1,&P2OUT ;p2.1,oa0 ; OA0, 2.4 MOV.B #OAP_0+OAPM_3+OAADC1,&OA0CTL0 ;OAP OA0I0, fast, A1,A3 A5 MOV.B #OAFBR_1+OAFC_3,&OA0CTL1 ;R2/R1=4R/16R, 4/16AVcc ;MOV.B #OAFBR_2+OAFC_3,&OA0CTL1 ;R2/R1=8R/8R, 8/16AVcc ;MOV.B #OAFBR_3+OAFC_3,&OA0CTL1 ;R2/R1=10R/6R, 10/16AVcc ;MOV.B #OAFBR_4+OAFC_3,&OA0CTL1 ;R2/R1=12R/4R, 12/16AVcc ;MOV.B #OAFBR_5+OAFC_3,&OA0CTL1 ;R2/R1=13R/3R, 13/16AVcc ;MOV.B #OAFBR_6+OAFC_3,&OA0CTL1 ;R2/R1=14R/2R, 14/16AVcc ;MOV.B #OAFBR_7+OAFC_3,&OA0CTL1 ;R2/R1=15R/1R, 16/16AVcc NOP BIS.B #LPM3,SR NOP END main OA 4 1 37
22274 \example_code\2274_asm\oa_operation\oa_m4 NAME main PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL BIS.B #BIT0+BIT1,&P2SEL ;P2.0,2.1 BIS.B #BIT1,&P2OUT ;p2.1,oa0 ; OA0, 2.4 MOV.B #OAP_0+OAPM_3+OAADC1,&OA0CTL0 ;OAP OA0I0, fast, A1,A3 A5 MOV.B #OAFBR_0+OAFC_4,&OA0CTL1 ;R2/R1=0R/16R, 4(,=1+R2/R1) MOV.B #OAFBR_1+OAFC_4,&OA0CTL1 ;R2/R1=4R/12R MOV.B #OAFBR_2+OAFC_4,&OA0CTL1 ;R2/R1=8R/8R MOV.B #OAFBR_3+OAFC_4,&OA0CTL1 ;R2/R1=10R/6R MOV.B #OAFBR_4+OAFC_4,&OA0CTL1 ;R2/R1=12R/4R MOV.B #OAFBR_5+OAFC_4,&OA0CTL1 ;R2/R1=13R/3R MOV.B #OAFBR_6+OAFC_4,&OA0CTL1 ;R2/R1=14R/2R MOV.B #OAFBR_7+OAFC_4,&OA0CTL1 ;R2/R1=15R/1R NOP BIS.B #LPM3,SR NOP END main OA 45 1 38
2 3 42274 \example_code\2274_asm\oa_operation\oa_m5 NAME main PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- 39
ORG 0FFFEh DC16 main ORG 0FFEAh DC16 adc_isr RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL BIS.B #BIT0+BIT1+BIT3+BIT4,&P2SEL ;P2.0,2.1,2,3 OA0I0 BIS.B #BIT3,&P2OUT ;p2.1,oa1 ; OA0 4 MOV.B #OAP_0+OAPM_3,&OA0CTL0 ;OAP OA0I0, fast,oa0out MOV.B #OAFBR_2+OAFC_4,&OA0CTL1 ; 4, 1+8R/8R ; OA1 5 ; OA0, fast, A3 MOV.B #OAP_3+OAPM_3+OAADC1,&OA1CTL0 MOV.B #OAFBR_2+OAFC_5,&OA1CTL1 ; 5, 1+8R/8R ; OA1 AD MOV.W #INCH_3,&ADC10CTL1 ; 10 MOV.W #REFON+SREF_1+REF2_5V,&ADC10CTL0 ; 2.5V, BIS.W #ADC10ON+ADC10SHT_3+ADC10IE,&ADC10CTL0 ; ADC10, 64 ADC10CLK, ADC10 BIS.W #ENC+ADC10SC,&ADC10CTL0 ; AD EINT ; adc_isr; MOV.W &ADC10MEM,R4 ; AD R4 NOP RETI ; END main 40
USCI 1USCI_A0 UART 2USCI_A0 SPI 3USCI_B0 I2C 1 USCI 2 USCI 3 UART 4 SPI 3 4 5 I2C 6 1USCI_A0 UART USCI_A0 2274 BIS.B #UCLISTEN,&UCA0STAT 00FF 0400 RAM NOP RAM 2USCI_A0 SPI USCI_A0 400 RAM PC 00FF 400H500H RAM 3USCI_B0 I2C USCI_B0 I2C 2274 PC 88 099 88 400H RAM 41
USCI_A0 UART 1 LSD SCIENCE & TECHNOLOGY CO., LTD. WWW.LIERDA..COM 22274 \example_code\2274_asm\usci_operation\usci_duplex_1200 3 MEMPTR EQU 0400h ; NAME main PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main ORG 0FFEEh 42
DC16 rx_isr ORG 0FFECh DC16 tx_isr RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL MOV.W #MEMPTR,R6 ; RAM R6 MOV.B #0,R8 ;R8 wait BIC.B #OFIFG,&IFG1 ; BIT.B #OFIFG,&IFG1 JNZ wait BIS.B #BIT0,&P1DIR ; LED BIS.B #BIT0,&P1OUT BIS.B #BIT4+BIT5,&P3SEL ;p3.4 TX,P3.5 RX BIS.B #BIT4,&P3DIR ;P3.4 ;BIS.B #UCLISTEN,&UCA0STAT ; BIS.B #UCSSEL0,&UCA0CTL1 ; 32768 MOV.B #00H,&UCA0BR1 ; 32768/1200=27.3 MOV.B #27,&UCA0BR0 BIS.B #UCBRS1,&UCA0MCTL ;UCBRSx=INT(0.3*8)=2 BIC.B #UCSWRST,&UCA0CTL1 ; USCI BIS.B #UCA0RXIE+UCA0TXIE,&IE2 ; EINT ; mainloop BIS.B #LPM3,SR ; 3 NOP rx_isr; XOR.B #BIT0,P1OUT ;, LED MOV.B &UCA0RXBUF,0(R6) ; R6 RAM CMP.W #MEMPTR+0FFh,R6 ; 256 JNZ loop3 ; 256, MOV.W #MEMPTR,R6 ; 256,R6 43
loop3 INC.W R6 ;R6 RETI ; tx_isr; XOR.B #BIT0,P1OUT ;, LED MOV.W #15000,R5 ;, loop1 DEC.W R5 JNZ loop1 MOV.B R8,&UCA0TXBUF ; INC.B R8 ; 1 RETI END main USCI_A0 SPI 1 2 44
3 2274 \example_code\2274_asm\usci_operation\spi_int_ma () 2274 \example_code\2274_asm\usci_operation\spi_int_sa MEMPTR EQU 0400h ; NAME main PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main ORG 0FFEEh DC16 rx_isr RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL MOV.W #MEMPTR,R6 ; MEMPTR R6 MOV.B #01h,R8 ;R8 wait_osc BIC.B #OFIFG,&IFG1 ; 45
BIT.B #OFIFG,&IFG1 JNZ wait_osc BIS.B #BIT0,&P1DIR ;LED BIS.B #BIT4+BIT5+BIT0,&P3SEL ;p3.4 TX,P3.5 RX,P3.0 UCA0CLK BIS.B #BIT4,&P3DIR ;P3.4 BIS.B #UCSSEL0,&UCA0CTL1 ; 32768 BIS.B #UCMST+UCSYNC+UCCKPL+UCMSB,&UCA0CTL0;spi,spi,, MOV.B #00h,&UCA0BR1 ;32768/1200=27.3 MOV.B #27,&UCA0BR0 MOV.B #00h,&UCA0MCTL BIC.B #UCSWRST,&UCA0CTL1 ; SPI BIS.B #UCA0RXIE,&IE2 ; spi EINT ; MOV.B R8,&UCA0TXBUF ; mainloop BIS.B #LPM3,SR ; 3 NOP rx_isr; MOV.B &UCA0RXBUF,0(R6) ; R6 ram I NC.W R6 ;ram 1 CMP.W #MEMPTR+256,R6 ; 256 JNZ wait_txifg MOV.W #MEMPTR,R6 ; ram NOP wait_txifg BIT.B #UCA0TXIFG,&IFG2 ; JZ wait_txifg INC.B R8 ; 1 MOV.B R8,&UCA0TXBUF ; XOR.B #BIT0,&P1OUT ;LED RETI ; END main NAME main PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x 46
;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main ORG 0FFEEh DC16 rx_isr RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL BIS.B #BIT0,&P1DIR ; LED BIS.B #BIT4+BIT5+BIT0,&P3SEL ;p3.4 SIMO,P3.5 SOMI,P3.0 UCA0CLK BIS.B #BIT5,&P3DIR ;P3.5 BIS.B #UCSYNC+UCCKPL+UCMSB,&UCA0CTL0 BIC.B #UCSWRST,&UCA0CTL1 ; spi BIS.B #UCA0RXIE,&IE2 ; EINT ; mainloop BIS.B #LPM3,SR ; 3 NOP rx_isr; wait_txifg BIT.B #UCA0TXIFG,&IFG2 ; JZ wait_txifg MOV.B &UCA0RXBUF,&UCA0TXBUF ; XOR.B #BIT0,&P1OUT ;led RETI END main USCI_B0 I2C 1 47
2 3 2274 \example_code\2274_asm\usci_operation\i2c_int_ma () 2274 \example_code\2274_asm\usci_operation\i2c_int_sa () NAME main PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main ORG 0FFECh DC16 i2c_tx_isr RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL MOV.B #00h,R8 ;R8 BIS.B #BIT0,&P1DIR ;LED BIS.B #BIT1+BIT2,&P3SEL ;p3.1 UCB0SDA,P3.2 UCB0SCL BIS.B #UCSSEL1,&UCB0CTL1 ; smclk MOV.B #00h,&UCB0BR1 ;SMCLK/11 MOV.B #11,&UCB0BR0 48
BIS.B #UCMST+UCSYNC+UCMODE1+UCMODE0,&UCB0CTL0; I2C MOV.W #88,&UCB0I2CSA ; 88 BIC.B #UCSWRST,&UCB0CTL1 ; I2C BIS.B #UCB0TXIE,&IE2 ; UCB0TX BIS.B #UCTR+UCTXSTT,&UCB0CTL1 ;, BIS.B #LPM0+GIE,SR ; 0 loop BIT.B #UCTXSTP,UCB0CTL1 ; JZ loop mainloop JMP mainloop i2c_tx_isr CMP.B #100,R8 ;100 JNZ next1 NOP ;,, BIS.B #UCTXSTP,&UCB0CTL1 ; stop BIC.B #UCB0TXIFG,&IFG2 ; BIC.B #LPM0,0(SP) ; 0 JMP end_i2c_tx_isr next1 MOV.B R8,&UCB0TXBUF ; INC.B R8 ; 1 end_i2c_tx_isr RETI ; END main MEMPTR EQU 0400h ; NAME main PUBLIC main ;----------------------------------------------------------------------------- ; MSP430F22x ;----------------------------------------------------------------------------- ORG 0FFFEh DC16 main ORG 0FFEEh DC16 i2c_stt_stp ORG 0FFECh DC16 i2c_rx_isr 49
RSEG CODE ; main MOV.W #0600H,SP ; stopwdt MOV.W #WDTPW+WDTHOLD,&WDTCTL ; MOV.B &CALBC1_1MHZ,&BCSCTL1 ; DCO 1MHZ MOV.B &CALDCO_1MHZ,&DCOCTL MOV.W #MEMPTR,R6 ; MEMPTR R6 BIS.B #BIT0,&P1DIR ;LED BIS.B #BIT1+BIT2,&P3SEL ;p3.1 UCB0SDA,P3.2 UCB0SCL MOV.B #UCSYNC+UCMODE_3,&UCB0CTL0;UCB0 I2C MOV.W #88,&UCB0I2COA ; 88 BIC.B #UCSWRST,&UCB0CTL1 ; I2C BIS.B #UCSTPIE+UCSTTIE,&UCB0I2CIE ; BIS.B #UCB0RXIE,&IE2 ; I2C BIS.B #LPM0+GIE,SR ; 0 NOP mainloop JMP mainloop i2c_rx_isr;ucb0i2c MOV.B &UCB0RXBUF,0(R6) ; R6 INC.W R6 RETI i2c_stt_stp;, BIT.B #UCSTPIFG,UCB0STAT ; JZ next1 BIC.B #LPM0,0(SP) ; next1 BIC.B #UCSTPIFG+UCSTTIFG,&UCB0STAT ; RETI END main 50
C I/O LED 2274 P1.0 LED LED P1.0 P1.0OUT=0,LED, LED ; 1 LED 2 32274 \example_code\2274_c\io_operation 51
2274 2274 XTAL1VLODCO MCLKSMCLK ACLK 12274DCO 2 Clock_def.h I/OClock_def.h DCO_FREQUENCY DCO 1MHZ8MHZ12MHZ 16MHZACLK_VLOCLK ACLK VLO 32768 SMCLK_LFC SMCLK ACLK DCO MCLK_XT2_OR_LFC MCLK ACLK DCO 1 22274 \example_code\2274_c\clock_ctl 52
53
FLASH FLASH 2274FLASH FLASH A FLASH VCC DATA SHEET 12xxFLASH (2274 32KB+256byte) (2) MEMORY 01000H FALSH ALOCK 4xx FLASH A A 54
1 22274 \example_code\2274_c\flash_rw 55
56
57
1 2 1 2 3 4 5 WDT 1 WDT WDTTMSEL=1 WDTSSEL WDTISx SOURCE/32768(WDTISx=00)SOURCE/8192(WDTISx=01) SOURCE/512(WDTISx=10)SOURCE/64(WDTISx=11) P1.0 LED 2 WDT WDTTMSEL=0 IFG1 WDTIFG PUC WDTIFG PUC WDTIFG WDT WDTIFG LED 1 22274 \example_code\2274_c\wdt_operation\wdt_timer int main( void ) { 58
WDTCTL=WDTPW+WDTHOLD; // BCSCTL1 =CALBC1_1MHZ; // DCO 1MHZ DCOCTL =CALBC1_1MHZ; //, ACLK, ACLK/32768(WDTISx=0) WDTCTL=WDTPW+WDTTMSEL+WDTSSEL+WDTCNTCL; P1OUT =BIT0; //LED P1DIR =BIT0; IE1 =WDTIE; // WDT _BIS_SR(GIE+LPM3_bits); // LPM3,ACLK(WDT ), return 0; } #pragma vector=wdt_vector interrupt void wdt_timer(void) { P1OUT ^=BIT0; } // //LED 1 22274 \example_code\2274_c\wdt_operation\wdt_wdt 59
60
16 Timer_A 1 A 2 A 3 A PWM 1 Timer_A 2 Timer_A 3 Timer_A 3 / 8 PWM 4 Timer_A 5 Timer_A 6 Time_A 1 A Timer_A CCR1 50000 SMCLK P1.0 LED 2 A Timer_A CCR2 ACLK CCR2 SMCLK R7 3 A PWM Timer_A SMCLK=32768*32, OUTMOD_7Rset/Set CCR0=512,CCR1=384,CCR2=128 PWM 512/ 32768*32TA1 384512-384=21TA2 12 P1.2P1.3 A 12274 \example_code\2274_c\ta_operation\ta_1 61
2 A 1 62
22274 \example_code\2274_c\ta_operation\ta_2 63
PWM 1 22274 \example_code\2274_c\ta_operation\ta_3 int main( void ) { WDTCTL=WDTPW+WDTHOLD; // BCSCTL1 =CALBC1_1MHZ; // DCO 1MHZ DCOCTL =CALBC1_1MHZ; TACTL=TASSEL1+TAR; //SMCLK, TAR CCR0=512; // PWM CCTL1 =OUTMOD_7; //CCR1 reset/set CCR1=384; //CCR1 PWM CCTL2 =OUTMOD_7; //CCR2 reset/set CCR2=128; //CCR2 PWM P1SEL =BIT2+BIT3; //TA1,TA2 P1DIR =BIT2+BIT3; TACTL =MC0; // A _BIS_SR(CPUOFF); return 0; } 64
ADC10 1ADC10 2ADC10 1 ADC10 2 ADC10 3 ADC10 4 ADC10 6 ADC10 5 ADC 1ADC10 ADC10 ADC10SC AD ADC10MEM, V(temp)=0.00355*TempC+0.986, ad_value AD temp_value, 2ADC10ADC10 TA.OUT1ADADC10MEMad_value[] AD ADC10 1 65
22274 \example_code\2274_c\adc10_operation\adc10_sch_st float ad_value; float temp_value; int main( void ) { WDTCTL=WDTPW+WDTHOLD; // BCSCTL1 =CALBC1_1MHZ; // DCO 1MHZ DCOCTL =CALBC1_1MHZ; ADC10CTL1=INCH_10; // 10, ADC10CTL0=REFON+SREF_1; // 1.5V, ADC10CTL0 =ADC10ON+ADC10SHT_3+ADC10IE; // ADC10, 64 ADC10CLK, ADC10 ADC10CTL0 =ENC+ADC10SC; // AD _BIS_SR(GIE+CPUOFF); // temp_value=((ad_value*1.5/1023)-0.986)/0.0035; // return 0; } #pragma vector = ADC10_VECTOR //ADC10 interrupt void adc_isr(void) { ad_value=adc10mem; // AD ad_value _BIC_SR_IRQ(CPUOFF); // 0 } ADC10 1 66
22274 \example_code\2274_c\adc10_operation\adc10_sch_rt volatile unsigned int ad_value[10]; int main( void ) { WDTCTL=WDTPW+WDTHOLD; // BCSCTL1 =CALBC1_1MHZ; // DCO 1MHZ DCOCTL =CALBC1_1MHZ; // AD 4, 10,AD TA.OUT1, ADC10CTL1=ADC10DIV_3+INCH_10+SHS_1+CONSEQ_2; // 1.5V,,AD,, AD ( AD ) ADC10CTL0=SREF_1+ADC10SHT_3+ADC10IE+REFON+ADC10ON; TACCR0=30; // TACCTL0 =CCIE; //CCR0 TACTL=TACLR+MC_1+TASSEL_2; //TA, smclk _BIS_SR(LPM0_bits+GIE); // 0,, TACCTL0 &=~CCIE; //CCR0 _BIC_SR(GIE); // ADC10CTL0 =ENC; //AD TACCTL1=OUTMOD_4; //CCR1 4, TAR=0, TACTL =TASSEL_2+MC_2; //TA,smclk _BIS_SR(LPM0_bits+GIE); // 0,, 10AD _NOP(); return 0; } #pragma vector = TIMERA0_VECTOR interrupt void ta0_isr(void) { TACTL=0; _BIC_SR_IRQ(LPM0_bits); } //TA0, // TA // #pragma vector = ADC10_VECTOR interrupt void adc_isr(void) { static char i=0; ad_value[i]=adc10mem; i++; if(i==10) _BIC_SR_IRQ(LPM0_bits+GIE); } //ADC10 // AD // 10 AD // 1ADC10, 67
2ADC10 LSD SCIENCE & TECHNOLOGY CO., LTD. WWW.LIERDA..COM 3 68
OA 1OA 2 2OA 3 3OA 4 4OA 45 1 OA 2 OA 3 4 OA 1OA 2 OA0 2(unity gain)p2.0 (0~AVCC )P2.1 ( AVCC) 2274 AVss OAFBR P2.0,, 2OA 3 OA0 3(comparator)P2.0 (0~Vcc) AVss OAFBR p2.0,, 3OA 4 OA0 4non_inverting)P2.0 ( )P2.1 ( AVCC) AVss 4OA 45 OA0 4, OA1 5,P2.0 OA0 () P2.3 OA1 ( AVCC) AVss, OA1 OA0 OAFBRx AD, OA 2 1 22274 \example_code\2274_c\oa_operation\oa_m2 int main( void ) { WDTCTL=WDTPW+WDTHOLD; // 69
BCSCTL1 =CALBC1_1MHZ; DCOCTL =CALBC1_1MHZ; P2SEL =BIT0+BIT1; P2OUT =BIT1; // DCO 1MHZ //P2.0,2.1 //p2.1,oa0 () OA0CTL0=OAP_0+OAPM_3+OAADC1; //OAP OA0I0, fast, A1,A3 A5 OA0CTL1=OAFBR_1+OAFC_2; //R2/R1=4R/16R, 4R //OA0CTL1=OAFBR_2+OAFC_2; //R2/R1=8R/8R, 8R //OA0CTL1=OAFBR_3+OAFC_2; //R2/R1=10R/6R, 10R //OA0CTL1=OAFBR_4+OAFC_2; //R2/R1=12R/4R, 12R //OA0CTL1=OAFBR_5+OAFC_2; //R2/R1=13R/3R, 13R //OA0CTL1=OAFBR_6+OAFC_2; //R2/R1=14R/2R, 14R //OA0CTL1=OAFBR_7+OAFC_2; //R2/R1=15R/1R, 15R _NOP(); _BIS_SR(LPM3_bits); // 3 _NOP(); return 0; } OA 3 1 22274 \example_code\2274_c\oa_operation\0a_m3 int main( void ) { WDTCTL=WDTPW+WDTHOLD; // BCSCTL1 =CALBC1_1MHZ; // DCO 1MHZ DCOCTL =CALBC1_1MHZ; P2SEL =BIT0+BIT1; P2OUT =BIT1; OA0CTL0=OAP_0+OAPM_3+OAADC1; //OAP OA0I0, fast, A1,A3 A5 OA0CTL1=OAFBR_1+OAFC_3; // 4/16AVcc; //OA0CTL1=OAFBR_2+OAFC_3; // 8/16AVcc; //OA0CTL1=OAFBR_3+OAFC_3; // 10/16AVcc; //OA0CTL1=OAFBR_4+OAFC_3; // 12/16AVcc; 70
} //OA0CTL1=OAFBR_5+OAFC_3; // 13/16AVcc; //OA0CTL1=OAFBR_6+OAFC_3; // 14/16AVcc; //OA0CTL1=OAFBR_7+OAFC_3; // 16/16AVcc; _NOP(); _BIS_SR(LPM3_bits); // 3 _NOP(); return 0; OA 4 1 22274 \example_code\2274_c\oa_operation\oa_m4 int main( void ) { WDTCTL=WDTPW+WDTHOLD; // BCSCTL1 =CALBC1_1MHZ; // DCO 1MHZ DCOCTL =CALBC1_1MHZ; P2SEL =BIT0+BIT1; //P2.0,2.1 P2OUT =BIT1; //p2.1,oa0 () OA0CTL0=OAP_0+OAPM_3+OAADC1; //OAP OA0I0, fast, A1,A3 A5 OA0CTL1=OAFBR_0+OAFC_4; //R2/R1=0R/16R, 4(, =1+R2/R1) OA0CTL1=OAFBR_1+OAFC_4; //R2/R1=4R/12R OA0CTL1=OAFBR_2+OAFC_4; //R2/R1=8R/8R OA0CTL1=OAFBR_3+OAFC_4; //R2/R1=10R/6R OA0CTL1=OAFBR_4+OAFC_4; //R2/R1=12R/4R OA0CTL1=OAFBR_5+OAFC_4; //R2/R1=13R/3R OA0CTL1=OAFBR_6+OAFC_4; //R2/R1=14R/2R OA0CTL1=OAFBR_7+OAFC_4; //R2/R1=15R/1R _NOP(); _BIS_SR(LPM3_bits); // 3 _NOP(); return 0; } 71
OA 45 1 2 3 42274 \example_code\2274_c\oa_operation\oa_m5 volatile unsigned int adc_value; int main( void ) { 72
WDTCTL=WDTPW+WDTHOLD; // BCSCTL1 =CALBC1_1MHZ; // DCO 1MHZ DCOCTL =CALBC1_1MHZ; P2SEL =BIT0+BIT1+BIT3+BIT4; //P2.0,2.1,2,3 OA0I0 P2OUT =BIT3; //p2.3,oa1 () // OA0 4 OA0CTL0=OAP_0+OAPM_3; //OAP OA0I0, fast,oa0out OA0CTL1=OAFBR_2+OAFC_4; // 4, 1+8R/8R // OA1 5 OA1CTL0=OAP_3+OAPM_3+OAADC1; // OA0, fast, A3 OA1CTL1=OAFBR_2+OAFC_5; // 5, 1+8R/8R // OA1 AD ADC10CTL1=INCH_3; // 3 ADC10CTL0=REFON+SREF_1+REF2_5V; // 2.5V, ADC10CTL0 =ADC10ON+ADC10SHT_3+ADC10IE; // ADC10, 64 ADC10CLK, ADC10 ADC10CTL0 =ENC+ADC10SC; // AD _BIS_SR(GIE); // _NOP(); return 0; } #pragma vector=adc10_vector interrupt void adc_isr(void) { adc_value=adc10mem; _NOP(); } // AD adc_value 73
USCI 1USCI_A0 UART 2USCI_A0 SPI 3USCI_B0 I2C 1 USCI 2 USCI 3 UART 4 SPI 3 4 5 I2C 6 1USCI_A0 UART USCI_A0 2274 UCLISTEN 00FF 0400 RAM _NOP() RAM 2USCI_A0 SPI USCI_A0 400 RAM PC 00FF 400H500H RAM 3USCI_B0 I2C USCI_B0 I2C 2274 PC 88 099 88 400H RAM USCI_A0 UART 1 74
2 32274 \example_code\2274_c\usci_operation\usci_duplex_1200 no_init char send_data[256] @ 0x0400; // 0x0400 int main( void ) { WDTCTL =WDTPW+WDTHOLD; // BCSCTL1 =CALBC1_1MHZ; // DCO 1MHZ DCOCTL =CALBC1_1MHZ; volatile unsigned int n; do // { IFG1 &=~OFIFG; for(n=5000;n>0;n--); } while(ofifg&ifg1); 75
} P1DIR =BIT0; // LED P1OUT =BIT0; P3SEL =BIT4+BIT5; //p3.4 TX,P3.5 RX P3DIR =BIT4; //P3.4 //UCA0STAT =UCLISTEN; // UCA0CTL1 =UCSSEL0; // 32768 UCA0BR1=0; // 32768/1200=27.3 UCA0BR0=27; UCA0MCTL =UCBRS1; //UCBRSx=INT(0.3*8)=2 UCA0CTL1 &=~UCSWRST; // USCI IE2 =UCA0RXIE+UCA0TXIE; // _BIS_SR(LPM3_bits+GIE); // 3 _NOP(); return 0; #pragma vector =USCIAB0RX_VECTOR interrupt void rx_isr(void) { static char i=0; P1OUT ^=BIT0; send_data[i]=uca0rxbuf; if(i==255) { i=0; } else { i++; } } //, LED // 0x0400 RAM // 256 // 256, 0x0400 #pragma vector =USCIAB0TX_VECTOR interrupt void tx_isr(void) { static char j=0; P1OUT ^=BIT0; //, LED unsigned int x; for(x=0;x<15000;x--); //, UCA0TXBUF=j; // j++; } USCI_A0 SPI 1 76
2 3 2274 \example_code\2274_c\usci_operation\usci_spi_tx 2274 \example_code\2274_c\usci_operation\usci_spi_rx no_init char rec_data[256] @ 0x0400; char send_data=1; int main( void ) { unsigned int n; WDTCTL=WDTPW+WDTHOLD; BCSCTL1 =CALBC1_1MHZ; DCOCTL =CALBC1_1MHZ; // // DCO 1MHZ 77
do{ // IFG1 &=~OFIFG; for(n=5000;n>0;n--); }while(ofifg&ifg1); P1DIR =BIT0; //LED P3SEL =BIT0+BIT4+BIT5; //p3.4 TX,P3.5 RX,P3.0 UCA0CLK P3DIR =BIT4; //P3.4 UCA0CTL1 =UCSSEL0; // 32768 UCA0CTL0 =UCMST+UCSYNC+UCCKPL+UCMSB; //spi,spi,, UCA0BR1=0; //32768/1200=27.3 UCA0BR0=27; UCA0MCTL=0; UCA0CTL1 &=~UCSWRST; // SPI IE2 = UCA0RXIE; // spi _BIS_SR(GIE); // UCA0TXBUF=send_data; //, _BIS_SR(LPM3_bits); // 3 return 0; } #pragma vector=usciab0rx_vector interrupt void rx_isr(void) { static unsigned int i=0; rec_data[i]=uca0rxbuf; i++; if(i==256) { i=0; } while(!(uca0txifg&ifg2)); send_data++; UCA0TXBUF=send_data; P1OUT ^=BIT0; } int main( void ) { WDTCTL=WDTPW+WDTHOLD; BCSCTL1 =CALBC1_1MHZ; DCOCTL =CALBC1_1MHZ; P1DIR =BIT0; P3SEL =BIT4+BIT5+BIT0; // 0x0400 ram // 256, // // 1 //LED // // DCO 1MHZ // LED //p3.4 SIMO,P3.5 SOMI,P3.0 UCA0CLK 78
P3DIR =BIT5; //P3.5 UCA0CTL0 =UCSYNC+UCCKPL+UCMSB; //spi,, UCA0CTL1 &=~UCSWRST; // spi IE2 =UCA0RXIE; // _BIS_SR(GIE+LPM3_bits); // 3 return 0; } #pragma vector=usciab0rx_vector //spi interrupt void rx_isr(void) { while(!(uca0txifg&ifg2)); // UCA0TXBUF=UCA0RXBUF; // P1OUT ^=BIT0; //led } USCI_B0 I2C 1 2 79
3 2274 \example_code\2274_c\usci_operation\i2c_int_ma () 2274 \example_code\2274_c\usci_operation\i2c_int_sa () char send_data=0; int main( void ) { WDTCTL=WDTPW+WDTHOLD; // BCSCTL1 =CALBC1_1MHZ; // DCO 1MHZ DCOCTL =CALBC1_1MHZ; P1DIR =BIT0; //LED P3SEL =BIT1+BIT2; //p3.1 UCB0SDA,P3.2 UCB0SCL UCB0CTL1 =UCSSEL1; // smclk UCB0BR1=0; //SMCLK/11 UCB0BR0=11; UCB0CTL0 =UCMST+UCSYNC+UCMODE1+UCMODE0; // I2C UCB0I2CSA=88; // 88 UCB0CTL1 &=~UCSWRST; // I2C IE2 =UCB0TXIE; // UCB0TX UCB0CTL1 =UCTR+UCTXSTT; //, _BIS_SR(CPUOFF + GIE); // 0 while(uctxstp&ucb0ctl1); // _NOP(); for(;;); return 0; } #pragma vector = USCIAB0TX_VECTOR // interrupt void i2c_tx_isr(void) { if(send_data!=100) // 100? { UCB0TXBUF=send_data; send_data++; } else //100 { UCB0CTL1 =UCTXSTP; // IFG2 &=~UCB0TXIFG; // _BIC_SR_IRQ(LPM0_bits); // } } no_init char data_ptr[100] @ 0x0400;// 0x0400 int main( void ) 80
{ } WDTCTL=WDTPW+WDTHOLD; // BCSCTL1 =CALBC1_1MHZ; // DCO 1MHZ DCOCTL =CALBC1_1MHZ; P1DIR =BIT0; //led P3SEL =BIT1+BIT2; //p3.1 UCB0SDA,P3.2 UCB0SCL UCB0CTL0=UCSYNC+UCMODE_3; //UCB0 I2C UCB0I2COA=88; // 88 UCB0CTL1 &=~UCSWRST; // I2C UCB0I2CIE =UCSTPIE+UCSTTIE; // IE2 =UCB0RXIE; // I2C _BIS_SR(CPUOFF + GIE); // 0 _NOP(); / while(1); return 0; #pragma vector = USCIAB0TX_VECTOR interrupt void i2c_rx_isr(void) { static char i=0; data_ptr[i]=ucb0rxbuf; i++; } // // 0x0400 RAM #pragma vector = USCIAB0RX_VECTOR //, interrupt void i2c_stt_stp(void) { if(ucstpifg&ucb0stat) { _BIC_SR_IRQ(LPM0_bits); // } UCB0STAT &=~(UCSTPIFG+UCSTTIFG); //, } 81