Ответ: Ну во первый проинитить все PLL'ские дела и системные клоки корректно распустить. А ISTR он вообще read-only, как это его Вы инитить задумали? Вот мой инит целиком (под кодек AIC23) - он точно рабочий.
CODEC_CTL: .macro adr,data
mov adr << #9, ac0
or data,ac0
call send_spi
.endm
start:
; ----------- Set new interrupt vector's location
bset intm
bclr C54CM
bclr ARMS
bclr CPL
rpt #20
nop
mov #0, port(#PLLCSR)
rpt #20
nop
amov #3FFFh,xsp
amov #3EFFh,xssp
rpt #20
nop
mov #vecs>>8,mmap(@IVPD)
mov #vecs>>8,mmap(@IVPH)
rpt #20
nop
; ----------- Reset CPU for dual stack with fast return configuration
reset
nop
nop
nop
nop
nop
nop
nop
nop
halt: b halt
begin:
amov #usrstack+STACKSIZE-2,xsp
amov #sysstack+STACKSIZE-2,xssp
bclr C54CM
bclr ARMS
bclr CPL
; PLL
mov #8000h,port(#PLLDIV1)
mov #8003h,port(#PLLDIV2)
mov #10,port(#PLLM)
rpt #20
nop
mov #1, port(#PLLCSR)
wait_lock: rpt #20
nop
mov port(#PLLCSR),t0
and #20h,t0
bcc wait_lock,t0==#0
; timer (12.288 MHZ TOUT1 for codec)
mov #0,port(#GPTGCTL_1)
mov #0,port(#GPTGCTL_0)
mov #0,port(#GPTCTL1_1)
mov #0,port(#GPTCTL1_0)
rpt #100
nop
mov #10h,port(#TSSR)
mov #0003h, port(#GPTGCTL_1)
mov #11,port(#GPTPRD1_1)
mov #0,port(#GPTPRD2_1)
mov #0,port(#GPTPRD3_1)
mov #0,port(#GPTPRD4_1)
mov #0,port(#GPTCNT1_1)
mov #0,port(#GPTCNT2_1)
mov #0,port(#GPTCNT3_1)
mov #0,port(#GPTCNT4_1)
mov #0088h, port(#GPTCTL1_1)
mov #0003h, port(#GPTGCTL_0)
mov #2944*2,port(#GPTPRD1_0)
mov #0,port(#GPTPRD2_0)
mov #0,port(#GPTPRD3_0)
mov #0,port(#GPTPRD4_0)
mov #0,port(#GPTCNT1_0)
mov #0,port(#GPTCNT2_0)
mov #0,port(#GPTCNT3_0)
mov #0,port(#GPTCNT4_0)
mov #0080h, port(#GPTCTL1_0)
; HPI - as GPIO
mov #0,port(#XBSR)
rpt #3
nop
mov #0FF0h, port(#PGPIOEN2)
mov #0, port(#PGPIODIR2)
;76543210
mov #11110000b, port(#IODIR)
mov #01110000b, port(#IODATA)
; MCBSP #0 - SPI, codec control
mov #0, port(#SPCR1_0) ; RRST=0
and #0, port(#SPCR2_0) ; XRST=0, GRST=0, frst=0
rpt #100h
nop
mov #1800h,port(#SPCR1_0)
mov #0,port(#SPCR2_0)
mov #0b09h,port(#PCR0) ; 0b09
mov #0040h,port(#RCR1_0)
mov #1,port(#RCR2_0) ;
mov #0040h,port(#XCR1_0)
mov #1,port(#XCR2_0) ;
mov #1314h,port(#SRGR1_0) ; 00FF
mov #2000h,port(#SRGR2_0)
mov #0,port(#MCR1_0)
mov #0,port(#MCR2_0)
or #0C0h,port(#SPCR2_0) ; enable SR generator
rpt #0F000h
nop ; wait for >=2 SR periods
or #1,port(#SPCR2_0)
or #1,port(#SPCR1_0)
rpt #0F000h
nop ; wait for >=2 SR periods
CODEC_CTL #0Fh,#0h
rpt #0F000h
nop ; wait for >=2 SR periods
CODEC_CTL #0Fh,#0h
rpt #0F000h
nop ; wait for >=2 SR periods
CODEC_CTL #0Fh,#0h
rpt #0F000h
nop ; wait for >=2 SR periods
CODEC_CTL #0,#01Ch
CODEC_CTL #1,#01Ch
CODEC_CTL #2,#0F9h
CODEC_CTL #3,#0F9h
CODEC_CTL #4,#012h ; 015
CODEC_CTL #5,#000h ;002h
CODEC_CTL #6,#100h
CODEC_CTL #7,#053h ; 13h for slave
CODEC_CTL #8,#018h
CODEC_CTL #9,#001h
; I2C
mov #0,port(#I2CMDR)
mov #0,port(#DMA_CCR2)
rpt #1000
nop
mov #7,port(#I2CPSC) ; 294.942/4/8= 9.216 MHZ module clock
mov #7,port(#I2CCLKL)
mov #7,port(#I2CCLKH) ; 9.216/(7+5+7+5) = 384 kHz
mov #050h,port(#I2CSAR) ; slave address
rpt #10
nop
mov #20h,port(#I2CMDR) ; out from reset
rpt #10
nop
mov #6,port(#I2CIER)
CSDP_TX: .set 0000011001000000b
CSDP_TXW: .set 0000011001000001b
CSDP_RX: .set 0010000000001100b
CCR_TX: .set 0001011000010100b
CCR_RX: .set 0100011000010011b
; I2C DMAC
;fedcba9876543210
mov #CCR_TX, port(#DMA_CCR2)
mov #0000000000100000b, port(#DMA_CICR2)
mov #CSDP_TX, port(#DMA_CSDP2)
mov #0, port(#DMA_CSSA_U2)
mov #0, port(#DMA_CDSA_U2)
mov #2, port(#DMA_CEN2)
mov #1, port(#DMA_CFN2)
; UART
mov #0,port(#URPECR)
rpt #100
nop
mov #8000h,port(#URPECR)
rpt #10
nop
mov #3,port(#URLCR)
rpt #5
nop
mov #80,port(#URDLL)
mov #0,port(#URDLM)
mov #1,port(#URIER)
mov #8,port(#URFCR)
mov port(#URLSR),t0
rpt #15
mov port(#URRBR),t0
mov #30h,port(#URTHR)
rpt #0F000h
nop
; MCBSP #1 - codec data
mov #0, port(#SPCR1_1) ; RRST=0
and #0, port(#SPCR2_1) ; XRST=0, GRST=0, frst=0
rpt #100h
nop
mov #0000h,port(#SPCR1_1)
mov #0000h,port(#SPCR2_1)
mov #0003h,port(#PCR1) ; 0b09
mov #0140h,port(#RCR1_1)
mov #0001h,port(#RCR2_1) ;
mov #0140h,port(#XCR1_1)
mov #0001h,port(#XCR2_1) ;
mov #0047h,port(#SRGR1_1) ; 00FF
mov #0000h,port(#SRGR2_1)
mov #0000h,port(#MCR1_1)
mov #0000h,port(#MCR2_1)
rpt #1000
nop
; rpt #0F000h
; nop
; DMAC's
; #0 - RX
;fedcba9876543210
mov #0100011101000101b, port(#DMA_CCR0)
mov #0000000000000000b, port(#DMA_CICR0)
mov #0000000000001101b, port(#DMA_CSDP0)
mov #(DRR1_1 << 1) & 0FFFFh, port(#DMA_CSSA_L0)
mov #(DRR1_1 >> 15) , port(#DMA_CSSA_U0)
mov #(RXBUF << 1) & 0FFFFh, port(#DMA_CDSA_L0)
mov #(RXBUF >> 15) , port(#DMA_CDSA_U0)
mov #BUFSZ*2, port(#DMA_CEN0)
mov #2, port(#DMA_CFN0)
; #1 - TX
;fedcba9876543210
mov #0001011101000110b, port(#DMA_CCR1)
mov #0000000000101000b, port(#DMA_CICR1)
mov #0000011000000001b, port(#DMA_CSDP1)
mov #(TXBUF << 1) & 0FFFFh, port(#DMA_CSSA_L1)
mov #(TXBUF >> 15) , port(#DMA_CSSA_U1)
mov #(DXR1_1 << 1) & 0FFFFh, port(#DMA_CDSA_L1)
mov #(DXR1_1 >> 15) , port(#DMA_CDSA_U1)
mov #BUFSZ*2, port(#DMA_CEN1)
mov #2, port(#DMA_CFN1)
rpt #200h
nop
or #80h,port(#DMA_CCR0)
or #80h,port(#DMA_CCR1)
rpt #200h
nop
btst #0,port(#DMA_CSR1),TC1
btst #0,port(#DMA_CSR0),TC1
mov #0FFFFh,mmap(@IFR0)
mov #0FFFFh,mmap(@IFR1)
or #1,port(#SPCR2_1)
or #1,port(#SPCR1_1)
mov #1210h, mmap(@IER0)
mov #0094h, mmap(@IER1)
bclr intm
.................................
send_spi: btst #1,port(#SPCR2_0),TC1
bcc send_spi,!TC1
mov ac0,port(#DXR1_0)
ret
-
- ??? zx(206 знак., 24.05.2005 15:15,
)
- Ответ: SM(4221 знак., 24.05.2005 15:19,
)
- ошибка при компиляции zx(231 знак., 24.05.2005 15:52,
)
- ошибка при компиляции zx(231 знак., 24.05.2005 15:52,
- Ответ: SM(4221 знак., 24.05.2005 15:19,
- ??? zx(206 знак., 24.05.2005 15:15,