Ассемблер dsPIC33F

Тема в разделе "WASM.BEGINNERS", создана пользователем l_inc, 20 апр 2008.

  1. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Взялся помочь написать программку на ассемблере под этот контроллер. Вроде почитал об архитектуре, посмотрел инструкции пользователя, но начинаю писать и наступаю на грабли. Среда разработки - IAR Embedded Workbench IDE.
    1)В общем пытаюсь, например, установить режим расширения аккумуляторов (биты SATA, SATB регистра контроля) и включить целочисленную арифметику для DSP-команд (бит IF регистра контроля), а компилятор говорит, что CORCON - неизвестный идентификатор, хотя в учебнике есть примеры использования этого регистра, на которые компилятор точно так же ругается:
    2)Кроме того, не могу обеспечить ввод/вывод. К сишному компилятору есть макросы для эмуляции UART, а на ассемблере не знаю, что делать. В отладчике есть окошко Terminal I/O, но опять таки: примеров работы с ним никаких.
    В интернете примеров на ассемблере для dsPIC33F/dsPIC30F не нашел. Если кому не лень, объясните, пожалуйста, пока по этим двум пунктам или неплохо бы примеры на ассемблере под этот контроллер.
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Забил на ввод/вывод и на CORCON. Получилась примерно вот такая программка перемножения двух матриц 8x8 (каждый элемент матрицы - два байта):

    Код (Text):
    1. ;W0 - указатель на результирующую матрицу
    2.         ;W1 - указатель на первую матрицу
    3.         ;W2 - указатель на вторую матрицу
    4.  
    5.     NAME first
    6.  
    7.     ASEGN CODE:CODE,0x0
    8.                                
    9.     BRA  start          ;Прыгаем на начало программы
    10.  
    11.     ASEGN CODE:CODE,0x100   ;Смещение 100h
    12.                                
    13. start:                          
    14.     MOV #7,W3
    15.     loop1:
    16.         MOV #7,W4
    17.         loop2:
    18.             CLR A
    19.             ;Суммируем произведения элементов W3-ей строки матрицы W1 и
    20.             ;W4-го столбца матрицы W2
    21.             MOV #7,W5
    22.             loop3:
    23.            
    24.                 SL W3,#3,W8
    25.                 ADD W5,W8,W8
    26.                 SL W8,#1,W8 ;W8 - смещение относительно начала матрицы W1
    27.                
    28.                 SL W5,#3,W9
    29.                 ADD W4,W9,W9
    30.                 SL W9,#1,W9 ;W9 - смещение относительно начала матрицы W2
    31.                
    32.                 MOV [W1+W8],W6
    33.                 MOV [W2+W9],W7
    34.                 MAC W6*W7,A
    35.             SUB #1,W5
    36.             BRA NN,loop3
    37.            
    38.             SL W3,#3,W8
    39.             ADD W4,W8,W8
    40.             SL W8,#1,W8
    41.             SAC A,[W0+W8]
    42.         SUB #1,W4
    43.         BRA NN,loop2
    44.     SUB #1,W3
    45.     BRA NN,loop1
    46.    
    47.     NOP
    48.  
    49.  
    50.     END
    Но в отладчике видно, что после MAC в ACCA попадает какой-то бред (вроде удвоенное произведение плюс то, что там уже было). А SAC сохраняет вообще нули в память. Опять таки, если кому не лень, объясните, почему.
     
  3. nds

    nds Member

    Публикаций:
    0
    Регистрация:
    16 июл 2007
    Сообщения:
    157
    напиши в icq 498179681