; Исходный текст файла. Хотела сделать так чтобы контроллер генерировал меандр на ножках, которые
могут работать как gpio Все интересующие меня регистры 32 разрядные
.sect ".reset"
.long INIT ; Reset vector
.text
INIT:
SETC INTM ; interrupt disable
CLRC AMODE ; 28xx adressing mode
EALLOW ;Enable access to protected space
MOVW DP, #0x1BE ; data page GPIO control registers(0x6f80..0x6fbf)
mov ACC, #0 ; LSW
mov ACC, #0 << #15 ; MSW
; all port A pins must be gpio
MOVL @0x6, ACC ;(0x6F86=0x1be*0x40+0x6 - addr GPAMUX1)- gpioA0..15
MOVL @0x8, ACC ; (0x6F86=0x1be*0x40+0x8 - addr GPAMUX2)- gpioA16..31
; pullup enable
MOV @0xC, ACC ;addr GPAPUD - 0x6F8C GPIO A Pull Up Disable Reg
MOVW DP,#0x1BF ; data page GPIO data registers(0x6fc0..0x6fff)
mov ACC, #0xffff ; LSW
mov ACC, #0xffff << #15 ; LSW
;clear all output latches
MOV @0x4, ACC ;(0x6Fc4=0x1bf*0x40+0x4 - addr GPACLEAR)
;set direction - output
MOVW DP,#0x1BE ; data page GPIO control registers(0x6f80..0x6fbf)
MOV @0xA, ACC; (0x6F8A=0x1be*0x40+0xA - addr GPADir )
MOVW DP,#0x1BF ; data page GPIO data registers(0x6fc0..0x6fff)
unlim:
; toggle outputs
MOV @0x6,ACC ;(0x6Fc6=0x1bf*0x40+0x6 - addr GPATOGGLE)
NOP
NOP
NOP
LB unlim
/* исходный текст cmd файла*/
MEMORY
{
PAGE 0 : PROG : origin = 0x3e8000, length = 0x1000
/* PAGE 0 : BOOT® : origin = 0x3FF000, length = 0xFC0
не совсем понимаю нужна ли эта строчка, в любом случае она ничего не меняет */
PAGE 0 : RESET : origin = 0x3F7FF6, length = 0x2
}
SECTIONS
{
/* 22-bit program sections */
.reset : > RESET, PAGE = 0
/* не совсем понимаю нужны ли эти строчки, в любом случае они ничего не меняют
.pinit : > PROG, PAGE = 0
.cinit : > PROG, PAGE = 0
*/
.text : > PROG, PAGE = 0
}
В результате всего этого всё транслируется, получается .out файл, который успешно прошивается через sci (rs232) при помощи программы
SDFlash. После чего выключаю плату, переключаю gpio34 из 0 в 1 (из загрузки по rs232 в загрузку из flash), снова включаю (reset
при включённом питании ничего не меняет) и вижу, что ничего не происходит, те выходы у которых по умолчанию
подтягивающий резистор разрешeн - в 1, у тех у которых запрещён - в 0, т.е. программа не выполняется,
то-ли я кудато не в туда её записываю, хотя во всех примерах cmd файл такой-же, может я что-то неправильно
понимаю в синтаксисе ассемблера или есть ещё какой-нибудь бит в каком-нибудь статусном регистре, который надо сбросить/установить
типа EALLOW? Может быть регистры адресуются как-то иначе, чем данные? Ещё я както не совсем уверена правильно ли я вычисляю
адрес при помощи регистра DP. Вобщем если какая-то некорректность в моих действиях бросается в глаза, сообщите пожалуйста.