C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6724|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 D& }5 J0 r) ^0 c( g
main文件:- y- J  t, x( w. C/ b8 `
interrupt void interrupt4(void)  
+ U/ C! o$ _2 c, ^" i{
, x2 \$ m. [9 C' G: s0 _. s# Y  Uint32 sample;' ^3 r: @! W  T0 ?
  f; [8 e7 p- c1 q- Y& [5 }
  sample = input_sample(); // read L + R samples from ADC, ~3 }* ]* N* ^: h4 s
  output_sample(sample);   // write L + R samples to DAC   ]  x2 W9 c2 u* T
  return;
% S% F. _' k, y& x0 n}# R1 c3 m9 R! }$ m5 V' C

; R6 X, P9 l- i* K; L4 e( F3 zint main( void )
. T+ c. @' J, a{! J5 X) e1 j9 j# t% z3 n
4 z" ^' E3 D6 r4 S, ^" t
    /* Initialize BSL */$ C3 f  R" \7 a2 y  L1 B$ c( y
    EVMC6747_init( );
6 U0 J" f9 G+ k- p, r% v        /* Call evmc6747_intr function */
7 A" o; \# v8 Y" o, h    aic3106_init( );" r! l& a9 [, Y4 x9 X3 l
        while(1);( K* `. R0 `4 C+ R9 b' j$ X  n
}! @1 b- u* @3 {- r! J- ~# L7 w
5 R! l, A" ], V1 d& {
' I) V4 r2 t: K3 Y4 X4 o
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: y; m, W* g% w" w* N7 t: _/* Initialize MCASP1 */4 F9 v6 \% s* ~! i
    mcasp = &MCASP_MODULE_1;" q2 _7 ?0 @0 M& J2 {9 p
    mcasp->regs->GBLCTL  = 0;       // Reset
" d. a4 u% y& S7 h. d3 S) p    mcasp->regs->RGBLCTL = 0;       // Reset RX- o1 l1 p! K% J2 Q
    mcasp->regs->XGBLCTL = 0;       // Reset TX, }& \7 k6 [/ M* z  B: O
    mcasp->regs->PWRDEMU = 1;       // Free-running- t* w. t* {' j. I& D7 r
   // configure McASP0 receive registers
8 I" J; a2 b7 I% F* q7 c4 u1 q    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 [. w# _4 ]5 r8 m! k    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus4 h3 }6 }$ Q  T
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
$ I* s$ w7 A5 G9 E    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)6 W" s, u& _$ j3 a$ A
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): f% D) P: L  p7 ]
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 {4 c6 @" j% k4 ]    mcasp->regs->RINTCTL    = 0x00000000; // Not used# N  M, V# L1 O0 ]6 E! x
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256' N0 \4 V& {% s. ^

7 Y+ M4 P8 {+ D    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used7 C" ]/ N& e9 G+ V4 B
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus$ s# _% O1 x( n+ @9 i
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word! z# X6 y* Z7 P7 k6 G
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16; K' V$ {5 v7 _
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK9 `0 K3 ]9 q" e( ^+ T0 d1 Z9 k
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
/ I3 D- f5 d: z0 J    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit1 x0 l' Q3 `+ H8 S* e! q
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
; L/ H. |$ z" o8 M
4 j5 V) Z' z0 w! G: v. \" i    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
! b9 w) R3 m! N- {. B! Y    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
. j! }" x0 B' K6 T$ A: g" m$ b7 l    mcasp->regs->PFUNC      = 0;          // All MCASPs
) T6 j, V3 W" M7 f) o8 d9 R    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
7 t) d1 L7 R$ n% q0 x& |2 w: A% g) ^6 c6 w8 {4 C4 n( F6 N
    mcasp->regs->DITCTL     = 0x00000000; // Not used9 M5 J# i0 ?3 n6 e, e# T
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
: f, f' X) a8 C5 Y5 D1 _    mcasp->regs->AMUTE      = 0x00000000; // Not used
2 g3 |' Q5 q2 j3 i6 U/ Y; c% @  H# Q
  F# T6 z1 L! S& I5 |3 |/* Starting sections of the McASP*/
$ |% T6 }+ n0 s2 t3 ]  C' I    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " W  |1 @4 x3 B3 b( F) }
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
9 p! d3 Q/ R( N- ?, ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
" s# n# q* P$ N% y. F3 Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; p0 ?5 v6 K- }' `/ }: O0 ?2 G$ H& T" A. v
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
: V3 K" h6 z" a# g6 a: D9 F* Z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );5 Y5 t( z) d; u% C% r, v
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 C) a7 N0 M) I5 B3 h2 g/ }! s9 A% M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );9 \3 ^- ^1 i7 q6 n9 l/ C

' Z, x" B3 G' K" ]! R& q: t    mcasp->regs->XSTAT = 0x0000ffff;
3 t! ?  }9 O% F7 a0 h1 s    mcasp->regs->RSTAT = 0x0000ffff;
* b' H$ O9 b  U8 @- @
9 k* v0 M6 G6 }; ^    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
' a1 H% c) w# ~- X8 m0 r    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& T# y$ D, A4 ~9 ]& b    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
# l) q2 N7 w  H5 \2 L) Q2 u2 ]    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
5 O5 C) h9 D. z/ X* K4 K" }! q, v  Y+ ~0 ]& u  B1 `" i, H
    /* Write a 0, so that no underrun occurs after releasing the state machine */& U2 A; c& b! U" R% |. ~
    mcasp->regs->XBUF5 = 0;$ R- l0 H/ R% V* ^
    mcasp->regs->RBUF0 = 0;4 N2 j' k5 m" L
) J/ \8 r4 o( r3 ]0 H$ ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; " P7 Y1 Q# c$ d6 g8 n, D+ e' b
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
. v) u( T7 k# m- F, c    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; - x9 ^) l2 w& \: q7 A. Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
' f8 `% M) p) U1 w9 T$ Q$ ]2 E. w. i' _: y: X2 ^0 Q5 o4 M- N
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 9 [) f2 X* J" \* G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );; f# T- A( ^& k8 S$ l
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
# z/ d* r/ I3 n2 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );+ N' b- W# f8 V) ^1 Q9 R! l

: P. S$ m" U( U* j* |/ ^    CSR = 0x0000;1 ]& @! j2 _9 p8 [0 Y/ |. s0 Z9 ^
    INTC_INTMUX1 = 0x3d;' O8 B; ]' }0 w0 G1 p
    ISTP = (unsigned int)vectors;
* ?# J% F, l/ L% w$ l+ H    ICR = 0xFFF0;  , K$ ]- \, p4 d' |
    IER |= 0x12;  ! ~- }5 V& J$ G* D/ H7 f, M
    CSR |= 0x01;  
' q) f8 p7 L8 D/ `8 ~$ ]  z* b4 Q0 s
) Y4 z, O5 Y+ O* t% q+ ?# c3 q
) f2 E! B' e$ n% ^& ^
还有就是两个输入输出函数:7 b1 k/ m& s$ e. L
void output_sample(Int32 out_data)" n6 O* a" g, S
{
* D9 Z4 z. Z1 u' i2 o  AIC31_data.uint = out_data;  
- b, ^) J! x. v/ Z+ C$ `  Z  MCASP1_XBUF5_32BIT = AIC31_data.uint;
) r2 p2 q$ C5 t* o}2 T  a# X1 U+ [% I

% P+ S8 I2 H" h; v. M% b/ u. DInt32 input_sample(void)
1 |# d4 Y7 r/ |, r' C9 j{  $ X' F; b; W4 N/ V# {' d
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
- [2 \$ W' N* l  @  n, x7 f  return (AIC31_data.uint);
$ _* s5 o0 z+ z3 Z( Q}1 c& p: w# \5 b& ^. c
3 U" [& a6 I; m9 _) q+ n: U3 l6 [
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-4-6 02:05 , Processed in 0.050801 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表