Question: I ' m trying to make an ARMv 7 assembly code to program an LED Chaser into my Raspberry Pi Pico 2 . I can't

I'm trying to make an ARMv7 assembly code to program an LED Chaser into my Raspberry Pi Pico 2. I can't seem to get my code to work, even after I flash it to my Pico board. I know that the board is being powered still because I get a voltage from my VBUS and VSYS, just not the GPIO 0-7 outputs as expected. I have attached my code below and was wondering if someone could fix up any errors with it so that my code can work and please let me know what I was doing wrong.
Code:
// Defines base addresses for GPIO registers
.equ GPIO_BASE, 0x40014000// Base address for GPIO
.equ GPIO_OE, GPIO_BASE +0x04// GPIO output enable register
.equ GPIO_OUT, GPIO_BASE +0x10// GPIO output register
.section .text
.global _my_start
// Entry point
_my_start:
LDR R0,=GPIO_OE // Load GPIO_OE register address
MOV R1, #0xFF // Make GPIO 0-7 outputs
STR R1,[R0]// Write to GPIO_OE register
// Call patterns in sequence
BL pattern_one // Call pattern_one
BL pattern_two // Call pattern_two
BL pattern_three // Call pattern_three
BL pattern_four // Call pattern_four
BL pattern_five // Call pattern_five
BL pattern_six // Call pattern_six
B _my_start // Loop back to the start
// Pattern One: LEDs light up one by one from GPIO 0 to 7
// Pattern One: LEDs light up one by one from GPIO 0 to 7
pattern_one:
MOV R4, #3// Repeat 3 times
pattern_one_loop:
MOV R5, #0// Start with GPIO 0
pattern_one_inner:
LDR R0,=GPIO_OUT // Load GPIO_OUT register address
MOV R1, #1// Set bit for GPIO pin
LSL R1, R1, R5// Shift to correct GPIO pin
STR R1,[R0]// Turn on the LED
BL delay // Call delay function
MOV R1, #0// Turn off the LED
STR R1,[R0]
ADD R5, R5, #1// Increment GPIO pin
CMP R5, #8// Check if reached GPIO 8
BNE pattern_one_inner // If not, loop
SUB R4, R4, #1// Decrement loop counter
CMP R4, #0// Check if finished 3 repetitions
BNE pattern_one_loop // If not, loop
BX LR // Return to main loop
// Placeholder for Pattern Two
pattern_two:
// Implement future functionality or LED pattern
BX LR // Return immediately
// Placeholder for Pattern Three
pattern_three:
// Implement future functionality or LED pattern
BX LR // Return immediately
// Placeholder for Pattern Four
pattern_four:
// Implement future functionality or LED pattern
BX LR // Return immediately
// Placeholder for Pattern Five
pattern_five:
// Implement future functionality or LED pattern
BX LR // Return immediately
// Placeholder for Pattern Six
pattern_six:
// Implement future functionality or LED pattern
BX LR // Return immediately
// Delay function
delay:
MOV R4, #255// Outer loop counter
outer_loop:
MOV R5, #255// Inner loop counter
inner_loop:
SUB R5, R5, #1// Decrement inner counter
CMP R5, #0// Check if inner counter reached 0
BNE inner_loop // If not, keep looping
SUB R4, R4, #1// Decrement outer counter
CMP R4, #0// Check if outer counter reached 0
BNE outer_loop // If not, keep looping
BX LR // Return from delay RP2040 PIN LAYOUT ```
// Defines base addresses for GPIO registers
.equ GPIO_BASE, 0x40014000_// Base address for GPIO
.equ GPIO_OE, GPIO_BASE +0x04// GPIO output enable register
.equ GPIO_OUT, GPIO_BASE +0x10// GPIO output register
.section .text
.global _my_start
// Entry point
_my_start:
LDR R0,=GPIO_OE // Load GPIO_OE register address
MOV R1, #0xFF // Make GPIO 0-7 outputs
STR R1,[R0]// Write to GPIO_OE register
// Call patterns in sequence
BL pattern_one // Call pattern_one
BL pattern_two // Call pattern_two
BL pattern_three // Call pattern_three
BL pattern_four // Call pattern_four
BL pattern_five // Call pattern_five
BL pattern_six // Call pattern_six
B _my_start // Loop back to the start
```
// Pattern One: LEDs light up one by one from GPIO 0 to 7
pattern_one:
MOV R4, #3// Repeat 3 times
pattern_one_loop:
MOV R5, #0// Start with GPIO 0
pattern_one_inner:
LDR R0,=GPIO_OUT // Load GPIO_OUT register addres:
MOV R1, #1// Set bit for GPIO pin
LSL R1, R1, R5// Shift to correct GPIO pin
STR R1,[R0]// Turn on the LED
BL delay // Call delay function
MOV R1, #0// Turn off the LED
STR R1,[R0]
ADD R5, R5, #1// Increment GPIO pin
CMP R5, #8// Check if reached GPIO 8```
BNE pattern_one_inner // If not, loop
SUB R4, R4, #1// Decrement loop counter
CMP R4, #0// Check if finished 3 repetitions
BNE pattern_one_loop // If not, loop
BX LR // Return to main loop
// Placeholder for Pattern Two
pattern_two:
// Implement future functionality or LED pattern
BX LR // Return immediately
// Placeholder for Pattern Three
pattern_three:
// Implement future functionality or LED pattern
BX LR // Return immediately
// Placeholder for Pattern Four
pattern_four:
// Implement future functionality or LED pattern
BX LR // Return immediately
// Placeholder for Pattern Five
pattern_five:
// Implement future functionality or LED pattern
BX LR // Return immediately
// Placeholder for Pattern Six
pattern_six:
// Implement futu
I ' m trying to make an ARMv 7 assembly code to

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!