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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
% t0 b. S$ o+ ]- C. c+ y: bmain文件:
3 i8 ^" J( J( l3 v+ C; a1 Ginterrupt void interrupt4(void)  ' R/ ~* N3 c: m; _* d4 q5 e6 g
{
' D- W4 }: W/ t: s: Z: K# Z  Uint32 sample;
( w. C/ S2 t$ j5 z$ q) a" @- O7 z8 M* t) G4 G6 i, O0 O
  sample = input_sample(); // read L + R samples from ADC
* ]; [% X( w6 F: h& h& ^  output_sample(sample);   // write L + R samples to DAC
0 c+ c6 x7 z6 j: I; r6 n% N  return;: Q# F5 U3 K! O% z% X1 u
}
! G& h8 [: i5 g6 P8 ]; B# X+ p# z  c: y
int main( void )
1 P9 k: m& i1 h7 r2 m& K{
4 z& O# A. f2 p2 v7 S! _" P' V# I' H1 N5 t1 T
    /* Initialize BSL */
2 l' d6 c3 \/ L) X: W7 d% |    EVMC6747_init( );
) O9 T; ~# o6 u" [6 H( J# y1 a        /* Call evmc6747_intr function */9 Y" M% s" z+ {5 ]
    aic3106_init( );! V3 j/ Z9 u0 Q, `# S2 e6 l
        while(1);9 Y9 i4 ]. j8 V3 p
}
+ c9 ?* ^$ k: A) u7 Q  m) n: {0 [1 a
( W6 n& I9 O2 _! a) s9 y2 m6 c  A- [  u  K& w
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
7 \  U% t& X, K7 w; D" r0 H! _  l- G/* Initialize MCASP1 *// x/ S5 U. ?9 }7 I- l. e
    mcasp = &MCASP_MODULE_1;
8 ^0 r5 ^" x; K$ K7 e0 W! R9 O    mcasp->regs->GBLCTL  = 0;       // Reset
( o5 E! y" u( X3 t1 t! r    mcasp->regs->RGBLCTL = 0;       // Reset RX1 Y% k! X/ d. o; s& A
    mcasp->regs->XGBLCTL = 0;       // Reset TX
7 }0 A  ]2 I- O. o0 v    mcasp->regs->PWRDEMU = 1;       // Free-running
# S4 w1 p/ w; b2 X/ X# g( X' ]& T! ^   // configure McASP0 receive registers. a% Y, U4 W" D( `3 V
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; }$ y; c* b/ [* W" \1 k
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 Y1 {4 M0 z! h  L. m9 j8 q- t
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
3 q- x3 l) S+ O! b, a0 C$ o    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
" O5 o* I  H8 T, l    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)3 s* O) \4 ^( i
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
% q6 H8 v9 v" Y  Z9 x0 s( ]    mcasp->regs->RINTCTL    = 0x00000000; // Not used: J. s4 c1 g9 l  W$ R
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! D4 ~7 `, P0 C$ V: I) [6 Y1 C  x6 `: O5 P
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 M' u( T; t$ B" U    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# v: ~' F& W% Z* C# o
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 S0 m6 j4 t7 w# s' q" ^& k# e    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
' i% A+ I, u7 }    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, g6 j' y: \, l7 o& z$ N    mcasp->regs->XTDM       = 0x00000003; // Slots 0,17 H; f. z' N+ Y8 \0 i! B
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit2 f1 `) r1 _, D/ k6 u4 z6 m' t
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
: S7 j; h* q' Y4 y" x
, d7 V4 d4 j& ?! [- f* p' I    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
# j" M9 {$ \; u* {" l5 t    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT2 t) \: H% r2 K/ @
    mcasp->regs->PFUNC      = 0;          // All MCASPs
" ?+ _/ |. [% Q7 O" Q6 C1 o6 r    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1  i6 ^2 u2 L# B% H/ s
, `" m$ s" |8 r9 H1 K* d
    mcasp->regs->DITCTL     = 0x00000000; // Not used5 A% V; b* V# Q
    mcasp->regs->DLBCTL     = 0x00000000; // Not used5 V8 Z, \' x1 @' l/ a) T- @3 P
    mcasp->regs->AMUTE      = 0x00000000; // Not used
% R& m: s3 z; z. X% F" D9 a" `6 T$ S: \
/* Starting sections of the McASP*/
: n. w! p' d6 Z0 G: h& R: w4 v    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; " S) a+ ]9 E1 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ) w; S% V; @+ X3 L1 K; x
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 f: I9 T6 T" ]/ W8 S. t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
; r  l$ X% F7 A* x+ X$ f: z) L, Q7 r* O  G: j" m  ~
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; . G& {, {! h$ V  l/ {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );# G% Z" l: N) I* `, |
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
3 |9 f1 T, b: ]9 a. P' ~6 e4 s8 t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
1 \! T, n( r. u* v2 `3 f$ E
: w& p+ w* S3 @! I# m6 d    mcasp->regs->XSTAT = 0x0000ffff; ) P, k( w5 i$ g
    mcasp->regs->RSTAT = 0x0000ffff;
' A1 y5 o8 d  m4 g/ l
( K- d" G$ k& ]6 N    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
5 [3 B0 M; d3 A* V    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- ~9 N$ l. x" o8 Z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   A; W4 X" N) n- r* n, {4 d
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 D: \9 g- E- _1 t' h3 I& X  E- F; N4 [: [5 j
    /* Write a 0, so that no underrun occurs after releasing the state machine */: k' u' j& q( d; E
    mcasp->regs->XBUF5 = 0;9 p# V! N; b  _! o6 }
    mcasp->regs->RBUF0 = 0;
* Y( w; U  E) x3 U" {% o% d* H5 ]3 u0 I% ~# d& j9 Z7 }
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; , F2 J& o# _9 N* o* k0 [$ `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );" X# w9 I" q9 g# @" O8 O
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
! `; Q# L$ |. a/ V, `4 w! k    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );  d- [) e" Z* {; K

8 W9 `$ u% e2 D' m4 `    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 4 ?9 m3 c8 z5 e. P& E. _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
/ b6 Q" h5 n2 Y) A2 S    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
, b  w7 u2 q: @: |4 Q) ?7 _+ A+ C    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ H6 r' J0 R7 w' o. c" _- u

' y/ O: {) p8 S    CSR = 0x0000;
' u2 ^' ^, a& D& S8 C    INTC_INTMUX1 = 0x3d;5 B2 F# M& \* j* _7 Y
    ISTP = (unsigned int)vectors;
. h( g! o& K1 e; S; ~1 p: r2 f$ l    ICR = 0xFFF0;  * r5 k# ?: j! \* u
    IER |= 0x12;  9 a# ]" Y) }" n: H
    CSR |= 0x01;  
3 ~4 G, p% L8 L) A- T6 i
% c  |" O1 R' V4 `& B& C2 e8 S4 f
; Q& K, g- E2 M  J7 `4 \0 A2 Y0 q7 I8 d, T3 U% @$ e2 v
还有就是两个输入输出函数:
$ B( g* q6 N4 Z3 G3 w( a* zvoid output_sample(Int32 out_data)
, U! P8 U7 {1 K1 z& d{
+ m( n/ M2 Y4 z# R  AIC31_data.uint = out_data;  " q* w' a9 ?2 v3 l/ r: b
  MCASP1_XBUF5_32BIT = AIC31_data.uint;% b' v. `5 a4 R% {8 h
}
5 V& A+ W6 |( b  q; D% z1 L
5 t  ^7 u4 t8 z9 l! U! O( V" e5 BInt32 input_sample(void)) [1 A7 c; t; [2 n$ s- n
{  
$ z* q& T7 s% o# A8 A+ u  AIC31_data.uint = MCASP1_RBUF0_32BIT;" w$ }2 W  y9 s# T8 W6 O
  return (AIC31_data.uint);* P  j% ^9 g2 Q7 v; Y/ }7 y, z( r
}+ s- t, D5 l$ e
1 G% Z, L& ]5 g9 Z+ Y6 f
分享到:  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-2-13 05:40 , Processed in 0.039336 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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