C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:  l8 u( R: C+ N* _
main文件:; B5 s  N$ @0 U$ G" e" U% B
interrupt void interrupt4(void)  
5 C* b% ?$ C+ z3 J! i; H, L2 n; q' n{
8 j9 u6 f/ M! g5 P* o+ ~3 Q- C  Uint32 sample;9 A( i& T! ~- S
; ~, A2 ]9 s# d- z6 n: }, k% Q
  sample = input_sample(); // read L + R samples from ADC
! f7 L) ]. b9 H  E! h4 |" w, Q' a  output_sample(sample);   // write L + R samples to DAC
% v# g% v  l  F8 ]: A  return;
* E; N: B" u& g/ g9 v, R3 a}* D% a$ e! l# l

, Z7 U6 A! n% v% ^int main( void )
. V3 f  u0 d# ]7 g. O! h" N  ~' q{
, o% e9 p1 n% x* J, V& d/ P3 ^/ R3 h9 j
    /* Initialize BSL */
& N; [4 n  k4 y+ N- |+ e    EVMC6747_init( );. @! T* Q" C! `5 R/ }
        /* Call evmc6747_intr function */$ w9 c* x* k3 ]. J, T7 F) b
    aic3106_init( );% T! y9 b+ m9 C) m' O% Z
        while(1);# M( U4 ~( w  s
}  F0 P. ^8 ]8 h" q9 v3 h' y! J

; c/ m) w( J# T2 V4 X* d4 u; _% T4 |2 s5 \1 j9 N  M
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题3 ^! n- E+ P& e4 }/ @* I6 o: K" y
/* Initialize MCASP1 */- k% w2 n. L5 o6 O4 m
    mcasp = &MCASP_MODULE_1;) V$ q' m8 s/ v2 w6 D5 y5 w
    mcasp->regs->GBLCTL  = 0;       // Reset
( @, `( C$ a( H: A# R% F    mcasp->regs->RGBLCTL = 0;       // Reset RX( C! G; I( s; w* h4 f; f
    mcasp->regs->XGBLCTL = 0;       // Reset TX% Z9 R" B, y" J0 R0 w, w- }/ G* r
    mcasp->regs->PWRDEMU = 1;       // Free-running4 k9 m: B$ S" @
   // configure McASP0 receive registers: T' R3 z  p/ H. h
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
  M2 S0 x* T  x/ O4 y2 `    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
/ U" ^- e$ J) B; s$ k# \4 s' t0 N    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ d- S% c3 z- C+ E: n2 O  S' n$ T
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)/ j( A; l4 ]. t. ?+ `7 U
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
* N; ?- i/ o2 n3 Q+ m    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# @7 N# }# [8 _3 d$ h) i    mcasp->regs->RINTCTL    = 0x00000000; // Not used& M4 ^+ C5 B# \$ B3 L
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
! m& {( x/ U, @; z, Q5 @
1 ?* x+ r9 h! ?4 `    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  l" H$ h0 Q( S1 J+ B
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! h' u1 u  Y9 E    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
5 M" L$ Z9 [& ^7 C' j1 V    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: k0 B+ E/ k. T' e' q+ @
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, I4 i1 A! Q& m. U/ N    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
" u$ R, |- l0 ]8 F  e6 ]    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
: n% H. D. e0 y/ s- ^+ q2 x    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
) E; ~0 y. U' O1 L' a
9 \  Z5 L: x" d' z( P/ s    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
6 s. Q% I. Z3 y* O5 p6 ?  ^    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 G* a6 o7 |+ A9 @* }0 [2 t    mcasp->regs->PFUNC      = 0;          // All MCASPs. }0 U' s- J& l$ u; L9 D: ^
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1+ y; r- W- _* O8 \2 Y
7 w1 k4 ?* P3 }9 O, G* D3 ]: {
    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 j0 N3 G: L, V: `$ I! b/ s    mcasp->regs->DLBCTL     = 0x00000000; // Not used+ l+ l1 d" g: n* v. h/ a) B% ]% j
    mcasp->regs->AMUTE      = 0x00000000; // Not used' I! x' t0 B0 y& Z- N  `

* Y6 r$ Q) q& A/* Starting sections of the McASP*/3 D- Z( ^" N- F3 d) d; y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 V: P( ^5 u( x* o4 u( F1 v* V4 l( Y    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
* u& X- X5 H4 G) I) R' K+ Z! L) h6 ~    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; $ C3 ?$ }7 q$ ^+ }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );8 F) z( {6 b/ h7 @1 Y
% A( y! V5 p' P; p
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 |# d' P, W8 [9 g' B* t: O7 R# K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );2 C6 @& L# t0 ?* {4 v
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ( v: |  b* F* K+ a, Q7 z" d% M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );$ J' F# f. k- [6 _2 O
! t' O0 n( l# ~1 Z4 v% e
    mcasp->regs->XSTAT = 0x0000ffff; # w# f8 Z5 I4 n& O5 K- ^. X
    mcasp->regs->RSTAT = 0x0000ffff; / K; K. F! l! P  @

6 a' d* z5 A2 u. m- Y" E    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
" ?: h# D  }) j" B/ T* X    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. x9 D# x  M! v! K    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . `% p1 n8 D& y6 l4 t5 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );; j* N$ u6 B+ o) u: k+ ]
% Z, R: t3 W% Z( g' i
    /* Write a 0, so that no underrun occurs after releasing the state machine */, l9 U4 j+ D* r$ @
    mcasp->regs->XBUF5 = 0;
! T- C! |1 i3 D9 @2 P    mcasp->regs->RBUF0 = 0;
) f' r" ^! \) v/ z1 T
( J: l# R; ^2 o- V9 x4 H0 o# a" M    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; / @1 O5 j+ G& b6 m( x+ Z7 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 p7 g' \8 {! U1 ^- P; R! y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
' g- @+ W: K2 y2 a7 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );/ G- f, N+ T5 K3 m
7 k7 c! j' v6 d9 h6 _7 K* Q
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; . R5 P9 w" a' O0 y1 c; B
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 p9 B* V: c6 `8 y& Y" u$ N8 x
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
- K! r1 m8 L: @' z8 s; o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );$ Z+ U( T0 @& y# j- d, c
. k- d7 l- F- p4 f# e* ?! {
    CSR = 0x0000;( U, B! s% g& k: u& j
    INTC_INTMUX1 = 0x3d;
' s) v# h3 g, R: n    ISTP = (unsigned int)vectors;. [: o* Z* I, g
    ICR = 0xFFF0;  
, @2 }6 U: G0 n$ P" h    IER |= 0x12;  6 @: ?( q  y$ k; `  ~4 H
    CSR |= 0x01;  ( n& V4 b; Q- [) @: D
- c, s' ]5 P' T6 _
  \0 }  m. n. `' x( [+ S* `1 \4 K

. D1 V: k( {& ]5 F3 R- }还有就是两个输入输出函数:
7 J0 s6 L3 O% m  yvoid output_sample(Int32 out_data)( o' p! W0 e3 H# [) y0 B6 e& `
{
- n! m) ^% \0 _7 M  AIC31_data.uint = out_data;  , W" t! `; s7 v+ {
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
/ ^# \$ N. p. h6 }) K}9 W3 I- k  S4 `) |  m
5 `! P' ]) ?( Z* K9 T
Int32 input_sample(void)$ I) C0 D/ P# |$ S) C# _, w
{  * J6 O1 c5 s2 B  |; x
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
; B, A' j  A- j, R  return (AIC31_data.uint);
# i+ Y6 _  e( Z' o8 e% Q! J! F}9 [6 G8 b& k  }. K* ?0 c
5 X6 q! D  i: c: u
分享到:  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, 2025-12-4 03:49 , Processed in 0.044214 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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