Elektrod-serv.ru

Передача данных по радиоканалу

Организация рабочего места и безопасность проведения тестирования

AR = X in 1.15 format

Computation time

sin : 30 + (3) cycles

cosine: 32 + (3) cycles

---------------------------------------------------------------

}

.VAR/DM sin_coeff;

.INIT sin_coeff : 0x3240, 0x0053, 0xAACC, 0x08B7, 0x1CCE;

.ENTRY sin_i_;

.ENTRY cos_i_;

cos_i_:

AY1 = 0x4000; { AY0 = PI/2 }

AR = AR + AY1; { AR = X+PI/2 }

sin_i_:

SI = AR; { save AR }

I1 = ^sin_coeff; {ptr to coeff buffer }

AY1=0x4000;

AF=AR AND AY1; {check 2nd or 4th quad.}

IF NE AR=-AR; {If yes negate input }

AY1=0x7FFF;

AR = AR AND AY1; {remove sign bit }

MY1=AR;

/*#ifndef GLOBAL_F*/

SR1 = MSTAT; { save MSTAT }

DIS M_MODE; { set fractional }

/*#endif*/

SR0 = MX1; {save MX1 }

MF=AR*MY1 (RND), MX1=DM(I1,M1); {MF = X^2 }

MR=MX1*MY1 (SS) , MX1=DM(I1,M1); {MR = C1*X }

CNTR=3;

DO approx UNTIL CE;

MR=MR+MX1*MF (SS);

approx: MF=AR*MF (RND), MX1=DM(I1,M1);

MR=MR+MX1*MF (SS);

MX1 = SR0; { restore MX1 }

/*#ifndef GLOBAL_F*/

MSTAT = SR1; { restore MSTAT }

/*#endif*/

SR=ASHIFT MR1 BY 3 (HI);

SR=SR OR LSHIFT MR0 BY 3 (LO); {convert to 1.15 format}

AR=PASS SR1;

IF LT AR=PASS AY1; {saturate if needed }

AY1=SI;

AF=PASS AY1;

IF LT AR=-AR;

RTS;

.ENDMOD;

Программа 2181_hdr.dsp

Содержит код инициализации ADSP 2181.

.MODULE/ABS=0 ADSP2181_Runtime_Header;

#define _MY_HANDLER 1

// объявление внешних функций Си для использования их в ассемблере

.EXTERNAL _lib_setup_everything;

.EXTERNAL main_;

#ifndef _MY_HANDLER

.EXTERNAL _lib_sp0r_ctrl;

#endif

.EXTERNAL stat_flag_;

.EXTERNAL next_cmd_;

.EXTERNAL process_a_bit; { uart }

.EXTERNAL IRQE_Flag_;

// Установка векторов прерываний

// По сбросу загружать функцию Си main

Reset_vector: CALL _lib_setup_everything;

CALL main_; RTS; NOP; {Begin C program}

Interrupt2: rti;NOP;NOP;NOP;

InterruptL1: rti;NOP;NOP;NOP;

InterruptL0: rti;NOP;NOP;NOP;

Sport0_trans: jump _sp0tx;nop;nop;nop;

#ifndef _MY_HANDLER

Sport0_recv: JUMP _lib_sp0r_ctrl;NOP;NOP;NOP;

#else

Sport0_recv: JUMP _sp0rx;NOP;NOP;NOP;

#endif

InterruptE: ena sec_reg; ar = 1; dm(IRQE_Flag_)=ar; rti;

BDMA_interrupt: rti;NOP;NOP;NOP;

#ifndef HW_UART

Interrupt1: pop sts; /* 20: SPORT1 tx or IRQ1 */

ena timer; rts; rti;

#else

Interrupt1: rti; /* 20: SPORT1 tx or IRQ1 */

rti; rti; rti;

#endif

Interrupt0: rti;NOP;NOP;NOP;

Timer_interrupt: jump process_a_bit; /* 28: timer */

rti; rti; rti;

Powerdown_interrupt: rti;NOP;NOP;NOP;

#ifdef _MY_HANDLER

/*-------------------------------------------------------------

1) Enble sec reg bank

2) Save all unaltered registers

3) Setup stack, Run C-handler

4) Restore unaltered registers

5) disable sec reg bank

-------------------------------------------------------------*/

.var/dm REG_SAVE_SP0RX;

.external modulator_;

.external demodulator_;

_sp0rx:

// сохранение регистров

dm(REG_SAVE_SP0RX + 0) = PX; /* 1 */

dm(REG_SAVE_SP0RX + 1) = L0; /* 2 */

dm(REG_SAVE_SP0RX + 2) = I1; /* 3 */

dm(REG_SAVE_SP0RX + 3) = L1; /* 4 */

dm(REG_SAVE_SP0RX + 4) = M2; /* 5 */

dm(REG_SAVE_SP0RX + 5) = M3; /* 6 */

dm(REG_SAVE_SP0RX + 6) = M5; /* 7 */

dm(REG_SAVE_SP0RX + 7) = L5; /* 8 */

dm(REG_SAVE_SP0RX + 8) = I6; /* 9 */

dm(REG_SAVE_SP0RX + 9) = M6; /* 10 */

dm(REG_SAVE_SP0RX + 10) = L6; /* 11 */

/* enable second register bank */

ena sec_reg;

/* set predefined INTR modes */

DIS BIT_REV, DIS AR_SAT, DIS AV_LATCH, ENA M_MODE;

L0=0;

L1=0;

L5=0;

L6=0;

M2=0;

M6=0;

/* restore unaltered registers */

PX = dm(REG_SAVE_SP0RX + 0)/* = PX*/; /* 1 */

L0 = dm(REG_SAVE_SP0RX + 1)/* = L0*/; /* 2 */

I1 = dm(REG_SAVE_SP0RX + 2)/* = I1*/; /* 3 */

L1 = dm(REG_SAVE_SP0RX + 3)/* = L1*/; /* 4 */

M2 = dm(REG_SAVE_SP0RX + 4)/* = M2*/; /* 5 */

M3 = dm(REG_SAVE_SP0RX + 5)/* = M3*/; /* 6 */

M5 = dm(REG_SAVE_SP0RX + 6)/* = M5*/; /* 7 */

L5 = dm(REG_SAVE_SP0RX + 7)/* = L5*/; /* 8 */

I6 = dm(REG_SAVE_SP0RX + 8)/* = I6*/; /* 9 */

M6 = dm(REG_SAVE_SP0RX + 9)/* = M6*/; /* 10 */

L6 = dm(REG_SAVE_SP0RX + 10)/* = L6*/; /* 11 */

rti;

#endif

.var/dm REG_SAVE_SP0TX;

_sp0tx:

/* enable second register bank */

ena sec_reg;

ar = dm(stat_flag_);

ar = pass ar;

if ne jump next_cmd_;

/* save unaltered registers */

dm(REG_SAVE_SP0TX + 0) = PX; /* 1 */

dm(REG_SAVE_SP0TX + 1) = L0; /* 2 */

dm(REG_SAVE_SP0TX + 2) = I1; /* 3 */

dm(REG_SAVE_SP0TX + 3) = L1; /* 4 */

dm(REG_SAVE_SP0TX + 4) = M2; /* 5 */

dm(REG_SAVE_SP0TX + 5) = M3; /* 6 */ Перейти на страницу: 3 4 5 6 7 8 9

Советуем почитать:

Исследование зигзагообразной приемной антенны Неотъемлемыми составными частями современных радиотехнических средств являются антенные системы и обслуживающие их тракты СВЧ. Назначение передающей антенны состоит в преобразовании ...

Определение безотказности РЭУ при наличии резервирования замещением (резерв ненагруженный) Целью данного курсового проектирования является получение (расчетным способом и моделированием отказов на ЭВМ) и сравнение показателей безотказности РЭУ при наличии резервирования замещение ...

Разработка технологического процесса сборки автомобильного усилителя мощности Современное развитие технической электроники вызвало к жизни ряд областей науки, техники специфически электронного направления. В связи с этим техническая электроника классифицируется по ...