Мне нравятся фишки http://www.xmos.com, но я хочу получить более низкий уровень понимания происходящего.В основном ассемблер.Я пытаюсь разобраться с чем-то таким простым, как индикатор мигания, установить индикатор, считать до N, очистить индикатор, считать до N, выполнить цикл навсегда.
Конечно, я могу разобрать программу XC из 10 строк, но есливы пытались увидеть, что в каждой программе много раздувания, какие биты должны поддерживать вывод компилятора и какие биты фактически настраивают gpio?
РЕДАКТИРОВАТЬ:
Код XC
#include
out port bled = PORT_BUTTONLED ;
int main () {
bled <: 0b0011 ;
while (1)
;
return 0;
}
Команды для сборки
source SetEnv
xcc bob.xc -target=XC-1A -o bob.xe
xsim --max-cycles 2000 --vcd-tracing "-o bob.vcd -ports -cycles -threads -timers -instructions -functions" bob.xe
РЕДАКТИРОВАТЬ 5
Вот ответ
.globl _start
_start:
ldc r0,4
ldc r2,8
ldc r3,16
ldc r1, 100
notmain:
sub r1,r1,1
bt r1, notmain
ldap r11,constants
set dp,r11
ldc r3, 0x6
setc res[r3], 0x8
setc res[r3], 0xf
ldw r3,dp[0x0]
setc res[r3],0x8
ldc r1,0x6
setclk res[r3],r1
top:
ldc r0, 0x8
out res[r3], r0
bl delay
ldc r0, 0x4
out res[r3], r0
bl delay
ldc r0, 0x2
out res[r3], r0
bl delay
ldc r0, 0x1
out res[r3], r0
bl delay
ldc r0, 0x2
out res[r3], r0
bl delay
ldc r0, 0x4
out res[r3], r0
bl delay
bu top
constants:
.word 0x00040200
delay:
ldc r2, 1000
da:
ldc r1, 10000
db:
sub r1,r1,1
bt r1, db
sub r2,r2,1
bt r2, da
retsp 0x0
сборка и загрузкаВышеприведенный ассемблер ms:
xcc m.s -target=XC-1A -nostartfiles -o m.xe
xrun m.xe
вы можете сим и посмотреть на контакты / выводы чипа, если вы избавитесь от задержек, чтобы вы могли увидеть, что что-то происходит при разумной длине сима
xsim --max-cycles 2000 --vcd-tracing "-o m.vcd -ports -cycles -threads -timers -instructions -functions -pads" m.xe
, но gtkwave не нравится синтаксис, поэтому для просмотра этого файла m.vcd с помощью gtkwave мне нужно отредактировать файл .vcd и
from:
$var wire 1 paa10 0:X0D61 $end
to:
$var wire 1 paa10 X0D61 $end
В основном удалить 0: для всех определений переменной paaлинии.
с указанным выше ассемблером x0d14, x0d15,x0d19, x0d20 - это пэды, которые покачиваются, видят соединение из их документации.
Это магическое число происходит из включаемого файла:
#define XS1_PORT_4C 0x40200
EDIT 6
Henk,спасибо, что прыгнул, чтобы помочь.Я проверял, как далеко я продвинулся и не понял, что такое 0x6 и setclk, и мне пришлось заново задавать вопрос или копать глубже.Приведенный ниже код начинает шевелить порт, но затем xcore, по-видимому, выполняет перестановку потоков и практически зависает, так что это все еще не совсем простая программа, на которую я надеялся.И я понимаю, что это не простое ядро (поэтому я хочу понять его на этом уровне, чтобы извлечь из него максимальную пользу).
.globl _start
_start:
ldc r1, 100
notmain:
sub r1,r1,1
bt r1, notmain
ldc r3,0x4020
shl r3,r3,4
setc res[r3],0x8
top:
ldc r0, 0x8
out res[r3], r0
ldc r0, 0x4
out res[r3], r0
ldc r0, 0x2
out res[r3], r0
ldc r0, 0x1
out res[r3], r0
ldc r0, 0x2
out res[r3], r0
ldc r0, 0x4
out res[r3], r0
bu top