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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: w- s, D- P; Q, Q& Fmain文件:& [3 ^# w8 Q5 h- C) K
interrupt void interrupt4(void)  
  N. T; }$ d6 `( D* t2 w' [4 z2 M. T7 u{
0 ^' n; @% ]; q. p# k8 L) u  Uint32 sample;
' p" m1 C5 r7 j9 E7 ~* m7 S/ T( K+ j& M4 O' b$ c
  sample = input_sample(); // read L + R samples from ADC' N- }4 K0 g; ^) a& {
  output_sample(sample);   // write L + R samples to DAC , `; q$ y) S  e' p
  return;4 x, ?, t" @8 M6 K9 d1 f4 W+ ?
}, K, G- C2 k( r2 E) \

8 y- s/ @6 y- Iint main( void )! S; u5 I% A- p+ N
{
! Q4 w; n1 @  t  ], T
1 Q. y, N* Y( e! i    /* Initialize BSL */5 o+ K; }& t% v* x5 V! r
    EVMC6747_init( );% ?( {% |) ]6 u8 ~2 ?- S$ K8 \
        /* Call evmc6747_intr function */
, |1 P! X( q) C! D    aic3106_init( );" P1 i2 f, y/ l- j6 `; l
        while(1);
9 V7 I, N, `5 y}
  W) X5 ?0 T9 F2 @2 N9 v: i2 z' ]0 t- P# T2 u" v3 |8 `
7 G% B9 p  W! v$ c
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, `& ]: ^% |7 a  J; D# ~2 i/* Initialize MCASP1 */
% S+ u1 S# Y2 d3 i; [    mcasp = &MCASP_MODULE_1;
0 D# v! ^! k" o. _7 I    mcasp->regs->GBLCTL  = 0;       // Reset0 \/ i4 [. w+ `" ^# _0 ^1 S9 @
    mcasp->regs->RGBLCTL = 0;       // Reset RX
2 l; q4 K4 r4 J# ~" ~    mcasp->regs->XGBLCTL = 0;       // Reset TX
( ^- M5 g6 {+ [- o' \2 |$ y6 Y/ H    mcasp->regs->PWRDEMU = 1;       // Free-running2 Z& U/ t$ r: T$ h7 v1 R4 I' Y  O
   // configure McASP0 receive registers
, W7 y/ a/ H  n+ {$ y* s2 Y) G; Y# V    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
- H& x) `+ U% c' T    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. d; H; \- i% S+ H6 a1 N( [    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ H+ Q' [3 S2 T9 b0 U; [7 Z
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)& O8 B' W; ]/ Q0 S) \
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
. p# a7 Y6 M+ L2 |6 k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& S/ k# u0 S7 C: @4 j! G
    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 ]0 Y+ P. f0 j4 A
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: E+ ]0 f2 b+ p% M8 |& a/ b! ^8 w$ A# H2 D9 E" X: c
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used) g# W' R: y% M/ t0 q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus" q2 D( M3 [  o- ]9 @4 ^/ w
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( L# o8 h* K  z, G
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-167 r( |$ k9 z; b% y5 i
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
0 T3 H6 u5 s/ I2 O8 _0 s    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 F' g3 r/ I( J# f/ |4 d1 W
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, ]$ `  r- p, p- ?1 X    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" f1 p; b# }) U0 D  M: Q# R
  y* W# p5 t$ G, J& F
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 }( U7 J6 `# Z; ~" l4 u/ u7 l" k
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT; t9 n. H% R1 f% t! U6 G
    mcasp->regs->PFUNC      = 0;          // All MCASPs0 l1 f. s$ `8 c# @: |8 f: N# D' k
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX19 Q2 I; Y# e1 j

( {; K7 B! l+ c: w; w    mcasp->regs->DITCTL     = 0x00000000; // Not used/ [$ Q: A; o# j. f
    mcasp->regs->DLBCTL     = 0x00000000; // Not used: v; J5 x6 y2 Y! `) {) {& l
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ c) _3 m' N' D
% o/ g0 z1 i. Y! L6 Q* a* G/* Starting sections of the McASP*// Y9 V& \  R& B0 S6 P% P
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; ! y3 g+ C+ ~2 u; K. h* G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
3 ?" [2 o. }. ]' ]$ l- T% V8 K5 @1 u    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
1 S$ e. c2 }( n' w' U) Q9 v) ^' `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
$ F. b- U/ G. m4 Z1 y
9 Q% Q& E5 q# ^# {    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' Y6 n2 m( L" I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );* V. z* n  n6 n* Z% r$ U( H
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; . [% Z7 }! p! z0 n
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 g/ ?- d; M1 K

+ x' p% V, W6 \. |; C& }( V4 |    mcasp->regs->XSTAT = 0x0000ffff;
: U4 ?) @0 V3 i; q$ P' S7 p    mcasp->regs->RSTAT = 0x0000ffff;
. Z* U# \! u7 B
1 u# {( E7 P, u( W( j6 p5 D    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
( r6 q% X* p$ v& g3 S, f  g9 n9 \$ I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
4 {' c5 O! s7 U+ i  }9 `. m    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 G8 Y+ M2 ]. h3 @! ~5 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );. s( \8 I4 z1 z

# U3 u$ R0 C. e4 u9 C4 }    /* Write a 0, so that no underrun occurs after releasing the state machine */
" |/ R! a1 X# b    mcasp->regs->XBUF5 = 0;
- s' c" n6 q; E  C2 N    mcasp->regs->RBUF0 = 0;, _$ z% |3 C- c' D- @0 a5 V5 X: L6 a

9 v- Y, J# N2 b: u    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 3 G; j$ G/ V% D/ I; y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );0 c8 l+ L3 Q: z. }7 A" a% L$ g
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 3 s1 f' @3 s" \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
2 q: A, x9 s7 o5 j8 |7 L0 w$ x; ?; ?* H3 F% u3 h: D# H2 j0 y
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 R4 A% t1 Y, l" `4 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );. J  q  X# i/ E& R# E. U
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 6 l, L$ \$ h4 ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
/ t* I0 L* I- c' t  z: V+ F/ _; o4 z" z# z$ p! r7 \! J
    CSR = 0x0000;
' J9 a# n5 W' b4 p# _! @    INTC_INTMUX1 = 0x3d;% S( j+ r, g; @3 M  ^6 x& P$ P; u6 L, h
    ISTP = (unsigned int)vectors;
: i* t7 x' N- T5 T  @4 a    ICR = 0xFFF0;  - ~: C1 P( [  G5 ^0 f0 x! r& f2 V
    IER |= 0x12;  
4 V. @2 z% v  M  i5 e    CSR |= 0x01;  
8 o3 R# E3 @' r* K% ]
$ ^* A" @* S+ q3 ?, K- Y' V; O7 P/ n8 O' j/ d; q
* \! C8 R$ N0 d- f, ~% G) w/ P9 x5 y
还有就是两个输入输出函数:* i1 ^' n, R- W2 G/ a: y
void output_sample(Int32 out_data)
: p/ M7 S! H3 z6 j; `+ R! e{/ u% v7 U% j1 \/ U
  AIC31_data.uint = out_data;    a. o  P* Z" T$ u* S
  MCASP1_XBUF5_32BIT = AIC31_data.uint;9 Y1 A4 w) D1 ?" f+ [. U
}
0 z# _4 J4 H3 y
# w. Y) D  O* e: Q: h$ wInt32 input_sample(void)
7 z1 `: G& U& V- H{  3 U+ y' b; P" b' D- D: f, O# |5 N
  AIC31_data.uint = MCASP1_RBUF0_32BIT;, S, Z' i2 v+ L7 y7 _# z
  return (AIC31_data.uint);
' I0 q, m2 M5 ~( X}
  B0 H- h8 \8 O( m6 y$ j- I  s. K4 B* d+ ~
分享到:  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-1-31 18:24 , Processed in 0.040686 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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