0% found this document useful (0 votes)
917 views

TI C5510 Assembly Programming

This document provides information about assembly programming commands for the TI C5510 digital signal processor. It describes different types of memory access modes, operand preferences for instructions like MPY and MAC, examples of how to use instructions like branch, repeat, move, and arithmetic and logical operations. Memory access can be single, dual, through CDP or indirect registers. Instructions like MPY, MAC, MAS specify preferences for memory, immediate values, and rounding. Examples are given for common instructions.

Uploaded by

Winswept
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
917 views

TI C5510 Assembly Programming

This document provides information about assembly programming commands for the TI C5510 digital signal processor. It describes different types of memory access modes, operand preferences for instructions like MPY and MAC, examples of how to use instructions like branch, repeat, move, and arithmetic and logical operations. Memory access can be single, dual, through CDP or indirect registers. Instructions like MPY, MAC, MAS specify preferences for memory, immediate values, and rounding. Examples are given for common instructions.

Uploaded by

Winswept
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 21

TI C5510 Assembly Programming

Preliminary
1. Smem single memory access in the instruction. eg. *ARx, *(#K23), *(#K16), K16. Cmem memory access through only CDP. eg. *CDP+ (only). Xmem, Ymem both occur together always. two memory accesses (see dual indirect addressing mode). eg. *(ARx+Tx), *(ARx-Tx) , *ARx+, *ARx- (only). 2. src, dst can be Tx, ARx, or ACx

Preliminary
3. 4. cond see sec. 1.2 (page 17) of spru374g.pdf. 5. pmad a label in the program (i.e. a program address) 6. With MPY, MAC, and MAS:
M preference of memory access in the instruction K Preference of immediate value in the instruction R Preference of rounding in the instruction

RELOP can be ==, !=, <, and >=.

MPYs
Command MPY Operand 1, ACx Tx memory Operand 2, ACy ACx memory Tx ACx ACx Operand 3

ACy ACx ACx ACy ACy

MPYM

MPYK

const

MPYMK

memory

const

ACx

Examples of MPYs
eg. MPY AC0, AC1 eg. MPY T1, AC2, AC3 eg. MPYM *AR1+, T0, AC1 eg. MPYM *(AR1+T0), AC2, AC3 eg. MPYM *AR0+, *AR2+, AC2 ; AC1=hi(AC1)*hi(AC0) ; AC3=T1 * hi(AC2) ; AC1=(*AR1)*T0; AR1=AR1+1 ; AC3=hi(AC2)*AR1, AR1=AR1+T0 ; AC2= (*AR0)*(*AR2) ; AR0=AR0+1, AR2=AR2+1 eg. MPYK #10, AC1, AC2 eg. MPYMK *AR1+,#200, AC1 ; AC2=10*hi(AC1) ; AC1= (*AR1)*200, AR1=AR1+1

MACs
Command MAC Operand 1, ACx ACy Smem Smem Xmem Tx Operand 2, Tx Tx [ACx] Cmem Ymem const Operand 3, ACy ACx ACy ACy ACx ACx [ACy] Operand 4 [ACy] ACy

MACM

MACK

MACMK

Smem

const

ACy

Examples of MACs
eg. MAC AC0, T1, AC2 eg. MAC AC0, T0, AC2, AC0 eg. MACM *AR3, AC2, AC3 eg. MACM *AR2, *CDP, AC2 eg. MACM *AR2, *AR3, AC3 eg. MACK T1, #16, AC3, AC2 eg. MACMK *AR2, #101, AC3 ; AC2=AC2+hi(AC0)*T1 ; AC0=AC2+hi(AC0)*T0 ; AC3=AC3+hi(AC2)*(*AR3) ; AC2=AC2+(*CDP)*(*AR2) ; AC3=AC3+(*AR2)*(*AR3) ; AC2=AC3+16*T1 ; AC3=AC3+(*AR2)*101

MASs
Command MAS Operand 1, Tx Smem Smem Smem Xmem Operand 2, ACx Cmem ACx Tx Ymem Operand 3, ACy ACx ACy ACx ACx Operand 4

MASM

ACy ACy

Examples of MASs
eg. MAS T0, AC1, ACW ; AC2=AC2-hi(AC1)*T0

eg. MASM *AR2+, *CDP+, AC3

; AC3=AC3-(*AR2)*(*CDP), ; AR2=AR2+1, CDP=CDP+1

eg. MASM, *AR3+, AC0, AC2

; AC2=AC2-hi(AC0)*(*AR3) ; AR3=AR3+1

eg. MASM *AR3+, *AR2+, AC1, AC3

; AC3=AC1-(*AR3)*(*AR2) ; AR3=AR3+1, AR2=AR2+1

ADD
Command Operand 1, src Smem const const<<#SHIFTW Smem<<#16 Smem<<Tx Smem<<#SHIFTW Xmem Operand 2, dst dst dst ACx ACx ACx ACx Ymem Operand 3

ADD

ACx

* SUB is same as above.

Examples of ADD
eg. eg. eg. ; AR0=AR0+T0 ; AC0=AC0+T0 ; AC2=AC2+(*AR6)<<#16 ; AR6=AR6+1 ; AC3=AC3+(*AR6)<<T0 ; AR6=AR6+1 ; AC1=AC1+(*AR2)<<#SHIFTW ; AR2=AR2+T0 ; T3=T3+2000 ; AC2= (*AR3)+(*AR4) ; AR3=AR3+1, AR4=AR4+1

eg.

eg.

eg. eg.

Branch
Command B BCC BCC XCC XCCPART CALL CALL CALLCC Operand 1, ACx label label label cond cond ACx label label cond src RELOP #K8 Operand 2

cond

Examples of Branch
eg. B AC0 ; Branch to address specified in the ; lower 24-bit of AC0 eg. eg. eg. eg. eg. eg. B there BCC iamhere, T0<=#0 BCC again, AR0==#0 BCC yetagain, ACO>#0 BCC diffbranch, AR0>=#12 XCC AR0==#0 SFTS AC0, #-1 ; Branch to location labeled there ; Branch to label iamhere if T0<=0 ; Branch to again if AR0==0 ; Branch to yetagain if AC0>0 ; Branch to diffbranch if AR0>=12 ; AC0=AC0>>1 if AR0==0 ; otherwise nothing happens

Examples of Branch
eg. XCC AC2>=#0 MPY T0, AC1, AC2 eg. CALL function ; AC2=hi(AC1)*T0 if AC2>=0 ; otherwise nothing happens ; control passed to label function, ; the address of the next instruction ; is stored on the stack

RPTs
Command RPT RPTBLOCAL RPTB Operand 1, #K8 CSR label label [BRC0, BRC1] [BRC0, BRC1]

Examples of RPTs
eg. In C: for(i=0;i<12, i++) Sum=Sum+a[i]; In Assembly: XOR AC0 RPT #11 ADD *AR1+, AC0 ;AC0=Sum ;AR1 a[0]

Examples of RPTs
eg.

MOV
Command Operand 1, Accumulator load from memory Smem<<#16 Smem Smem<<#SHIFTW Smem<<Tx Accumulator store to memory ACx hi(ACx) rnd(hi(saturate(ACx))) rnd(hi(saturate(ACx<<Tx))) ARx ARx ARx ARx ACx ACx ACx ACx Operand 2

MOV

MOV

Examples of MOV
eg. eg. ; hi(AC0)=(*AR1), lo(AC0)=0, AR1=AR1+1 ; lo(AC0)=(*AR3), hi(AC0)=sign extended, ; AR3=AR3+1 ; AC0= (*AR7)<<30, AR7=AR7-1 ; AC2=(*AR5)<<T1, AR5=AR5+T0 ; (*AR2)=lo(AC2), AR2=AR2+1 ; (*AR2)=hi(AC2), AR2=AR2+1 ; (*AR3)=hi(satruated(rounded(AC0))), ; AR3=AR3+1 ; (*AR7)=hi(satruated(rounded(AC0<<T0))), ; AR7=AR7+1

eg. eg. eg. eg. eg.

eg.

MOV
Command Operand 1, Operand 2 CPU register load from memory MOV Smem BRC0 BRC1 CSR BRC0 BRC1 CSR BRC0 BRC1 CSR

MOV

Tx

MOV

ARx

Examples of MOV
eg. ; BRC0=(*AR1), AR1=AR1+1 eg. ; BRC1=(*AR1), AR1=AR1+1

eg.

; CSR=(*AR1), AR1=AR1+1

eg.

; BRC0=T0

eg.

; BRC1=AR1

eg.

; CSR=AR2

You might also like