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

 
 
> Пишу код на асме, не запускаются прерывания от таймера
uriy
сообщение Dec 18 2007, 05:39
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Пишу init_code на асме, никак не могу запустить прерывания от таймер. Может кто увидит что тут не так
Код
#include <defBF533.h>
#include "uartlib.h"
#include "sicnames.h"


#define UART_BAUD    9600        // uart baudrate, must be 9600 bps
#define XTAL        32768000    // quarz frequency in Hz

.section data1;

.align 4;                                
.var aEchoFifo[16];

.byte sHead[] = 13,10,'-------------------------------',
                13,10,'ADSP-BF533 Blackfin is speaking',
                13,10,'(DL =',0;
.section program;

/*******Pre-Init Section*********************************************/
/*******DO NOT MODIFY************************************************/
    [--SP] = ASTAT;            //Save Regs onto stack
    [--SP] = RETS;
    [--SP] = R7;
    [--SP] = R6;
    [--SP] = R5;
    [--SP] = R4;
    [--SP] = R3;
    [--SP] = R2;
    [--SP] = R1;
    [--SP] = R0;
    
    [--SP] = P5;
    [--SP] = P4;
    [--SP] = P3;
    [--SP] = P2;
    [--SP] = P1;
    [--SP] = P0;
    
    [--SP] = I0;
    [--SP] = I1;
    [--SP] = I2;
    [--SP] = I3;
    [--SP] = B0;
    [--SP] = B1;
    [--SP] = B2;
    [--SP] = B3;
    [--SP] = M0;
    [--SP] = M1;
    [--SP] = M2;
    [--SP] = M3;
    [--SP] = L0;
    [--SP] = L1;
    [--SP] = L2;
    [--SP] = L3;
/********************************************************************/

/*******Init Code Section********************************************/



/*******SPI Setup************/
    P0.L = lo(SPI_BAUD);
    P0.H = hi(SPI_BAUD);
    R0 = 0x0008(Z);                    
    W[P0] = R0;                            
    SSYNC;    
    
    call SetupInterruptVectors;
    call InitTimer;
    
    P0.L = lo(SIC_IMASK);
    P0.H = hi(SIC_IMASK);    
    R0 = [P0];
    BITSET(R0,16);            // enable timer0 interrupt
    [P0] = R0;
    ssync;

    P0.L = LO(IMASK);
    P0.H = HI(IMASK);
    R0 = [P0];
    BITSET(R0,11);            // ivg11 enabled
    [P0] = R0;    
    
    
/********UART setupr*********/
    P0.L = lo(UART_GCTL);
    P0.H = hi(UART_GCTL);
    
    R0 = (XTAL*10)/(5*16*UART_BAUD);    // set baudrate at 9600
    call uart_init;
    
    p1.l = sHead;
    p1.h = sHead;
    call uart_puts;
///////////////////////////////////////    

    P2.L = FIO_DIR & 0xffff;    
    P2.H = FIO_DIR >>16;    
    R0 = W[P2] (Z);
    BITSET(R0,6);                        // set LED port to output
    W[P2] = R0;
    
    P2.L = FIO_FLAG_D & 0xffff;
    P2.H = FIO_FLAG_D >>16;    
    R0 = W[P2] (Z);
    BITSET(R0,6);                        // switch on LED
    W[P2] = R0;    

    
rx_data:
rx_wait:        
    r1 = w[p0+UART_LSR-UART_GCTL] (z);
    CC = bittst(r1,bitpos(DR));
    if !CC jump rx_wait;    
    
    r0 = w[p0+UART_RBR-UART_GCTL] (z);    
    call uart_putc;
    
    P2.L = FIO_FLAG_T & 0xffff;
    P2.H = FIO_FLAG_T >>16;    
    R0 = W[P2] (Z);
    BITSET(R0,6);    
    W[P2] = R0;    
        
    jump rx_data;        
            
    
//Set PF as input
    P2.L = FIO_DIR & 0xffff;
    P2.H = FIO_DIR >> 16;
    R0 = W[P2](Z);
    BITCLR(R0,10);                    //Set PF10 as input
    W[P2] = R0;    
    
//Set Active High Polarity
    P2.H = FIO_POLAR >> 16;
    P2.L = FIO_POLAR & 0xFFFF;
    R0 = W[P2](Z);
    BITCLR(R0,10);                    //Set active low polarity for PF10
    W[P2] = R0;    
        
//Enable PF
    P2.H = FIO_INEN >> 16;
    P2.L = FIO_INEN & 0xFFFF;
    R0 = W[P2](Z);
    BITSET(R0,10);                    //Enable PF10
    W[P2] = R0;
    
//Read Flag Register
    P2.H = FIO_FLAG_D >> 16;
    P2.L = FIO_FLAG_D & 0xFFFF;
    R0 = W[P2](Z);                    //Read the FLAG register
    CC = BITTST(R0,10);                //Check if PF10 was asserted
    IF CC JUMP PF10_NOT_ASSERTED;

    R3.H = 0x0000;
    R3.L = 0x0100;
    JUMP DONE;

                
PF10_NOT_ASSERTED:    
    R3.H = 0x0001;
    R3.L = 0x9C80;        // user programm start from page 200
    
    
DONE:        
    

/*******Post-Init Section********************************************/
/*******DO NOT MODIFY************************************************/
    L3 = [SP++];
    L2 = [SP++];    
    L1 = [SP++];
    L0 = [SP++];
    M3 = [SP++];
    M2 = [SP++];
    M1 = [SP++];
    M0 = [SP++];
    B3 = [SP++];
    B2 = [SP++];
    B1 = [SP++];
    B0 = [SP++];
    I3 = [SP++];
    I2 = [SP++];
    I1 = [SP++];
    I0 = [SP++];
    
    P0 = [SP++];
    P1 = [SP++];
    P2 = [SP++];
    P3 = [SP++];
    P4 = [SP++];
    P5 = [SP++];
    
    R0 = [SP++];
    R1 = [SP++];
    R2 = [SP++];
    RETS = [SP++];
    R4 = [SP++];
    R5 = [SP++];
    R6 = [SP++];
    R7 = [SP++];
        


    RETS = [SP++];
    ASTAT = [SP++];
/********************************************************************/

    RTS;

//*******************************************************************
//    Setup Timer interrupt vector
//*******************************************************************        
SetupInterruptVectors:
    P0.H = hi(EVT11);    
    P0.L = lo(EVT11);

    R0.L = TIMER_ISR;
    R0.H = TIMER_ISR;    // Default Real Time Clock Handler (Int8)
    [P0] = R0;
    
    RTS;    

InitTimer:
    P4.H = hi(TIMER0_CONFIG);
    P4.L = lo(TIMER0_CONFIG);
    R1 = 0x59;            // PWM_OUT | PERIOD_CNT | IRQ_ENA | OUT_DIS
    W[P4] = R1;
    
    P4.H = hi(TIMER0_PERIOD);
    P4.L = lo(TIMER0_PERIOD);
    R1 = 32000;
    W[P4] = R1;
    
    P4.H = hi(TIMER0_WIDTH);
    P4.L = lo(TIMER0_WIDTH);
    R1 = 5;
    W[P4] = R1;    
    
    P4.H = hi(TIMER_ENABLE);
    P4.L = lo(TIMER_ENABLE);
    R1 = 1;
    W[P4] = R1;
    
    RTS;    
    
TIMER_ISR:                // Real Time Clock Wake-Up Interrupt
    P4.H = hi(TIMER_STATUS);
    P4.L = lo(TIMER_STATUS);
    R1 = 1;
    W[P4] = R1;
    
    P2.L = FIO_FLAG_T & 0xffff;
    P2.H = FIO_FLAG_T >>16;    
    R0 = W[P2] (Z);
    BITSET(R0,6);    
    W[P2] = R0;    
    RTI;

По прерываниям от таймера должен инвертироваться флаг PF6, тоже самое происходит когда приходит символ через UART - это работает. Не смущайтесь что моя программа не выходит из этого init_code, это пока для отладки.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- urasinov   Пишу код на асме   Dec 18 2007, 05:39


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

 


RSS Текстовая версия Сейчас: 15th June 2025 - 18:55
Рейтинг@Mail.ru


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