📄 main.asm
字号:
/******************************************************************************
** **
** Name: BF537 EZ-KIT Blink LEDs **
** **
*******************************************************************************
Analog Devices, Inc. All rights reserved.
File Name: BF537_EZ-KIT_BlinkLeds.asm
Hardware: ADSP-BF537 EZ-KIT Board Rev. 1.0
ADSP-BF537 Rev. 0.0 Silicon
Special Connections: SW5 on EZ-KIT Board, pins 1-4 should be ON.
Purpose: Toggle LEDs on the EZ-KIT
********************************************************************************/
#include <defBF537.h>
#include "startup.h"
#define PB1 0x0004 // switch SW13, LED pattern 0 (PF2)
#define PB2 0x0008 // switch SW12, LED pattern 1 (PF3)
#define PB3 0x0010 // switch SW11, LED pattern 2 (PF4)
#define PB4 0x0020 // switch SW10, stop (PF5)
#define led_pattern0 0xfc0 // initial LED pattern (also PB1)
#define led_pattern1 0x540 // LED pattern after pressing PB2
#define led_pattern2 0xcc0 // LED pattern after pressing PB3
#define delay 0x4000000
.section L1_code;
.global _main;
_main:
// configure programmable flags
// set port f function enable register (need workaround)
p0.l = lo(PORTF_FER);
p0.h = hi(PORTF_FER);
r0.l = 0x0000;
r1 = w[p0] (z); //#22 work-around, read PORT_MUX before writing
ssync;
w[p0] = r0; //#22 work-around: write it a few times
ssync;
w[p0] = r0; //#22 work-around: write it a few times
ssync;
// set port f direction register
p0.l = lo(PORTFIO_DIR);
p0.h = hi(PORTFIO_DIR);
r0.l = 0xFC0;
w[p0] = r0;
ssync;
// set port f input enable register
p0.l = lo(PORTFIO_INEN);
p0.h = hi(PORTFIO_INEN);
r0.l = 0x3C;
w[p0] = r0;
ssync;
// set port f polarity register
p0.l = lo(PORTFIO_POLAR);
p0.h = hi(PORTFIO_POLAR);
r0 = 0x0;
w[p0] = r0;
ssync;
// set port f clear register
p0.l = lo(PORTFIO_CLEAR);
p0.h = hi(PORTFIO_CLEAR);
r0.l = 0xFC0;
w[p0] = r0;
ssync;
p1.l = lo(PORTFIO);
p1.h = hi (PORTFIO);
r4 = w[p1](z); // read value of LEDs
r3 = 0xfc0; // mask of bits 11-6
r4 = r4 & r3; // preserve bits 11-6
r2 = led_pattern0; // set initial LED pattern
loop1:
r2 = r2 & r3; // mask of bits 11-6
r2 = r4 | r2; // value to write to LEDs
p0.l = lo(PORTFIO);
p0.h = hi (PORTFIO);
w[p0] = r2; // write to LEDs
ssync;
r2 = ~r2; // toggle the LED value
r5 = 0x0; // clear the stop flag
call DELAY;
read_pf:
p0.l = lo(PORTFIO);
p0.h = hi (PORTFIO);
r0 = w[p0](z); // read port f data register
// check if PB1 was pressed
pb1_check:
r1 = PB1;
r1 = r0 & r1;
cc = r1 == 0x0;
if cc jump pb2_check; // PB1 not asserted
r2 = led_pattern0; // PB1 asserted (change LED pattern)
r5 = 0x0; // clear the stop flag
// check if PB2 was pressed
pb2_check:
r1 = PB2;
r1 = r0 & r1;
cc = r1 == 0x0;
if cc jump pb3_check; // PB2 not asserted
r2 = led_pattern1; // PB2 asserted (change LED pattern)
r5 = 0x0; // clear the stop flag
// check if PB3 was pressed
pb3_check:
r1 = PB3;
r1 = r0 & r1;
cc = r1 == 0x0;
if cc jump pb4_check; // PB3 not asserted
r2 = led_pattern2; // PB3 asserted (change LED pattern)
r5 = 0x0; // clear the stop flag
// check if PB4 was pressed
pb4_check:
r1 = PB4;
r1 = r0 & r1;
cc = r1 == 0x0;
if !cc jump stop_flag; // PB4 asserted
// if here then no switch has been pressed
cc = r5 == 0x0; // check stop flag status
if cc jump loop1; // stop flag = OFF
jump read_pf; // stop flag = ON
stop_flag:
r5 = 0x1; // set the stop flag
jump read_pf; // check for PB to re-start
DELAY:
p2.l = lo(delay);
p2.h = hi(delay);
lsetup(delay_loop, delay_loop) lc0=p2;
delay_loop: nop;
rts;
_main.END:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -