реклама на сайте
подробности

 
 
> Вопросы новичка по STM8
evil_laugh
сообщение Oct 4 2011, 14:37
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 4-10-11
Пользователь №: 67 546



Здравствуйте!

Прошу помощи гуру, имеющих или имевшим дело с контроллерами STM8. Решил попробовать освоить их как предварительную "ступень" перед переходом на STM32. Заказал себе плату STM8 Discovery, жду, пока приедет. Пока решил почитать даташит и попробовать что-нибудь написать+отладить в симуляторе. Пусть этот топик будет сборником моих нубских вопросов sm.gif

Среда разработки - STVD, язык - ассемблер, компилятор встроенный в среду, другого не скачивал.

Почитал ту скудную информацию, которую удалось добыть в сети по началу работы с STM8 на ассемблере. Прочитал даташит. Решил попробовать по аналогии с найденным в интернете включением диода на ножке сделать переключение источника тактирования на внешний кварц.

Вот такой код. Вместо бесконечного цикла, сгенерированного программой, вставил кусочек кода, составленный прямо по даташиту.


Код
stm8/

    #include "mapping.inc"
    #include "STM8S105C6.inc"

    segment 'rom'
main.l
; initialize SP
    ldw X,#stack_end
    ldw SP,X

    #ifdef RAM0    
; clear RAM0
ram0_start.b EQU $ram0_segment_start
ram0_end.b EQU $ram0_segment_end
    ldw X,#ram0_start
clear_ram0.l
    clr (X)
    incw X
    cpw X,#ram0_end    
    jrule clear_ram0
    #endif

    #ifdef RAM1
; clear RAM1
ram1_start.w EQU $ram1_segment_start
ram1_end.w EQU $ram1_segment_end    
    ldw X,#ram1_start
clear_ram1.l
    clr (X)
    incw X
    cpw X,#ram1_end    
    jrule clear_ram1
    #endif

; clear stack
stack_start.w EQU $stack_segment_start
stack_end.w EQU $stack_segment_end
    ldw X,#stack_start
clear_stack.l
    clr (X)
    incw X
    cpw X,#stack_end    
    jrule clear_stack

;    Здесь начинается мой код.

start.l

    BSET    CLK_SWCR,#1        
    BRES    CLK_SWCR,#2    ;выкл. прерывание
    LD        A,#$B4            ;значение для внешнего кварца
    LD        CLK_SWR,A        ;загружаем
    
loop.l        ;бесконечный цикл

    jra    loop


    

    interrupt NonHandledInterrupt
NonHandledInterrupt.l
    iret

    segment 'vectit'
    dc.l {$82000000+main}                                ; reset
    dc.l {$82000000+NonHandledInterrupt}; trap
    dc.l {$82000000+NonHandledInterrupt}; irq0
    dc.l {$82000000+NonHandledInterrupt}; irq1
    dc.l {$82000000+NonHandledInterrupt}; irq2
    dc.l {$82000000+NonHandledInterrupt}; irq3
    dc.l {$82000000+NonHandledInterrupt}; irq4
    dc.l {$82000000+NonHandledInterrupt}; irq5
    dc.l {$82000000+NonHandledInterrupt}; irq6
    dc.l {$82000000+NonHandledInterrupt}; irq7
    dc.l {$82000000+NonHandledInterrupt}; irq8
    dc.l {$82000000+NonHandledInterrupt}; irq9
    dc.l {$82000000+NonHandledInterrupt}; irq10
    dc.l {$82000000+NonHandledInterrupt}; irq11
    dc.l {$82000000+NonHandledInterrupt}; irq12
    dc.l {$82000000+NonHandledInterrupt}; irq13
    dc.l {$82000000+NonHandledInterrupt}; irq14
    dc.l {$82000000+NonHandledInterrupt}; irq15
    dc.l {$82000000+NonHandledInterrupt}; irq16
    dc.l {$82000000+NonHandledInterrupt}; irq17
    dc.l {$82000000+NonHandledInterrupt}; irq18
    dc.l {$82000000+NonHandledInterrupt}; irq19
    dc.l {$82000000+NonHandledInterrupt}; irq20
    dc.l {$82000000+NonHandledInterrupt}; irq21
    dc.l {$82000000+NonHandledInterrupt}; irq22
    dc.l {$82000000+NonHandledInterrupt}; irq23
    dc.l {$82000000+NonHandledInterrupt}; irq24
    dc.l {$82000000+NonHandledInterrupt}; irq25
    dc.l {$82000000+NonHandledInterrupt}; irq26
    dc.l {$82000000+NonHandledInterrupt}; irq27
    dc.l {$82000000+NonHandledInterrupt}; irq28
    dc.l {$82000000+NonHandledInterrupt}; irq29

    end


Собственно, решил просмотреть всё это дело во встроенном симуляторе. Всё компилится, всё замечательно.

Первый вопрос: где можно посмотреть значения контроллерных спецрегистров? Наблюдать их в окне Memory, которое сплошняком показывает всю память контроллера, как-то не очень наглядно.

Второй вопрос: у многих регистров есть так называемое Reset Value. Почему в окне Memory все регистры, кроме очищенных в начале кода, равны 0xFF?

Третий вопрос: почему приведённый выше код, хоть и изменяет значения регистров (от 0xFF) согласно данным командам, ни к чему не приводит? Как вообще правильно инициализировать контроллер? В примерах из сети якобы всё прекрасно работает, хотя там всего одна строчка (выдача 1цы на ножку) добавляется вместо бесконечного цикла, который с самого начала в программе стоит.

И, наконец, четвёртый вопрос - есть ли что-то ... ну, поприличнее, что ли, этой среды разработки, где можно нормально писать на ассемблере под STM8? После MPLAB этот STVD поначалу кажется неудобным, да ещё и симулятор как-то странно работает.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 17:51
Рейтинг@Mail.ru


Страница сгенерированна за 0.01881 секунд с 7
ELECTRONIX ©2004-2016