; Исходный текст файла. Хотела сделать так чтобы контроллер генерировал меандр на ножках, которые могут работать как 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. Вобщем если какая-то некорректность в моих действиях бросается в глаза, сообщите пожалуйста.
|