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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:* a+ o) s, X5 L' |+ |$ b
main文件:
0 d0 }, w9 l% P! yinterrupt void interrupt4(void)  
( r( Q" Z' g2 |; X{# f7 m: y. H( J4 U2 u) P
  Uint32 sample;
- [; `; f8 U; k0 z  j( X/ F' a& _' j. J1 i
  sample = input_sample(); // read L + R samples from ADC
& y0 o+ B. _0 X9 S- Y  output_sample(sample);   // write L + R samples to DAC 1 \7 r2 u& M* z# B
  return;3 a+ H- E3 @! ?4 K3 X9 I
}, r  l  b  S( x% j
2 ]/ W  y! B+ [( d
int main( void )
- s, m; f% w$ Q% {2 Q3 c{' A, ?, z% _& H* Z0 \
' }/ F' J) [- Q! N( p" l- z+ x
    /* Initialize BSL */" S8 o; H7 c9 m' s3 r% p# t9 ~8 A
    EVMC6747_init( );
6 |+ t) x. }' D% C* O4 z2 a        /* Call evmc6747_intr function */! `" \# G+ Y  h5 w8 u6 X
    aic3106_init( );
$ z* Q) ]/ b: i( V1 Z/ `, n        while(1);
8 F$ N, _# ^/ c# p9 b5 i}
) S, @8 C- v& `( U' ?+ S% P/ l( t
4 a9 o$ F; A+ F
  ~+ O. l) ^- S" ^& l' ^aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
' z, Y4 b+ ~/ ?+ p/ J/* Initialize MCASP1 */
; M6 J3 p6 w2 ~3 J" N7 L: T9 O    mcasp = &MCASP_MODULE_1;
8 l& [2 d4 C- R( W    mcasp->regs->GBLCTL  = 0;       // Reset
" b4 m" a4 m$ M- C' x* e    mcasp->regs->RGBLCTL = 0;       // Reset RX
7 `9 o% F; a0 ^+ H4 l9 h% o6 Y    mcasp->regs->XGBLCTL = 0;       // Reset TX6 v: }8 h0 _" s; \- A4 z
    mcasp->regs->PWRDEMU = 1;       // Free-running, X: V8 S, U, U
   // configure McASP0 receive registers
% u2 \  D* s4 P    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used, `1 O) t9 g5 S; T' R: g( j
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! v8 Z4 F0 B1 G* \( W+ n8 V/ x! k4 R5 a    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word7 D$ o* G/ X; z. n/ h
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 @9 q. F6 {( i% p( Z9 o    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
& \, ?8 c  L: q    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
3 X* I/ M, ?7 a- A4 z    mcasp->regs->RINTCTL    = 0x00000000; // Not used. B2 C4 ?% e- A
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- C" r! H" Y! W
/ K# E3 k0 y4 c! }- ~
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 z# O6 l2 t5 D2 S% Q
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus/ W- o  S6 s( r8 e: z( k3 O
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
: m* ~5 `" z5 \( K; d  g- q7 n    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
+ Q% z9 L" Z( R5 n) z* |( t& f    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK4 V* H; J# C$ W9 m6 v
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
2 D# U1 a0 M7 O" c; H    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% E* P  J# u4 V2 @* t; Z
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% c  E$ Q; s% b7 w" }1 d
' K$ \+ ?7 I3 c6 P" u6 g7 {8 M  V    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN3 i- q4 P7 _8 F  O5 F4 K
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
1 J* }' h- J, \    mcasp->regs->PFUNC      = 0;          // All MCASPs$ I  L$ l& E# D. G8 v2 w
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
& T. S5 ~" K/ ^" O1 D+ W3 S( |3 S4 [9 t/ y  C
    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 i' V+ B4 X9 R! I! H    mcasp->regs->DLBCTL     = 0x00000000; // Not used& J8 B# s: m' `6 ]
    mcasp->regs->AMUTE      = 0x00000000; // Not used; h4 U* k5 l; h4 h9 r
$ X! A1 ?; B+ h; V) e# E& ^1 i
/* Starting sections of the McASP*/- M' H$ g, k% U8 p! h
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ G; ?) g$ F5 L    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  % @$ |9 ]7 j- _' s# u
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
7 _( o- E3 v. u( l, X    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );# f, z% G: p+ Q, O
' B8 Q! i* U7 G+ w, x, m$ L
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ( J% R4 N7 y8 ?! {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );& g: i1 \& H6 r; d  p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 3 I) p7 `3 [7 V+ o; C/ X
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
& N* x; Q3 Z& X' V
. p7 c' K: @7 ~+ s6 L    mcasp->regs->XSTAT = 0x0000ffff; 5 R1 D2 j) I/ P! f1 M, [  i; Z. J3 p
    mcasp->regs->RSTAT = 0x0000ffff; + y+ d$ F5 ~5 R5 T5 o8 c

: Y; b- l9 m2 T3 }! m    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
2 Q- c% R. ^, Q5 G% {* S' c! j& |    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );" g& C8 A( R6 Z: }
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
4 l/ T) K9 ?( W) R# p    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );' n( U# \2 T3 G9 B) I; i: V
! V1 U# B4 z6 l1 Q% M1 T6 u
    /* Write a 0, so that no underrun occurs after releasing the state machine */
$ S  c# C+ J* k7 Z  L! L    mcasp->regs->XBUF5 = 0;. V9 \( t( w% j. V' _
    mcasp->regs->RBUF0 = 0;- R4 A9 \2 X8 {4 z' Q: ~" z! k

/ g- @6 c7 O. e9 S    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 0 A, p$ w* g3 z( u7 {. z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
/ z2 T& X  S8 p( P) p+ y    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
7 I( }, T2 y: c, W3 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 n" F% n6 F+ o8 J* \$ @. X  s
+ v% \+ Y6 x6 w; J
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 h( W) C9 ^0 P% ~+ g2 G  g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
7 e+ z% H0 n6 |( T3 j' e3 {; ^( y' I* M    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
* l2 u4 S5 J) f* l% k. q    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
4 n$ f- E  y: u; E+ ^
$ p4 {+ o& L9 A0 m/ \4 l    CSR = 0x0000;
: O0 d; y' c2 F6 w; V+ U    INTC_INTMUX1 = 0x3d;
! y4 I' a* z4 G+ r* \# |+ z8 |  T+ L    ISTP = (unsigned int)vectors;
1 o( a: n0 C) f8 o. F    ICR = 0xFFF0;  " r' \/ Q! R+ u7 c, I( d+ n
    IER |= 0x12;  
# {4 m+ Y, b% V( [2 `: H, x    CSR |= 0x01;  
2 O* U8 W$ Q3 O' h) O! h0 f7 s1 O% G( A; K8 r/ m: I
! Y4 j1 K% n+ k$ m  m* w. Z+ {; t: {

: [: l* K1 W; W还有就是两个输入输出函数:( i0 ^+ p% I9 J
void output_sample(Int32 out_data)1 d2 g8 F: Y! t( _) B
{+ F) @8 S9 C+ Y2 ]9 S5 ~3 F
  AIC31_data.uint = out_data;  
3 P/ x1 d& M+ j  ?; v) k4 O* r+ p8 _  MCASP1_XBUF5_32BIT = AIC31_data.uint;2 i1 V; |9 r: j" H. [( `
}- {+ Q4 R3 b; [. \

  p  _) U& o3 ?" f$ S% j- V# qInt32 input_sample(void)5 ]" r: U. H0 @
{  
/ A1 d1 X1 e0 i" {% M3 ~! F  AIC31_data.uint = MCASP1_RBUF0_32BIT;
. M' R) M0 n! r" x7 i8 W) U/ P% v  return (AIC31_data.uint);. y" e& p" t/ S
}; ~4 l. x& i* j- \) L8 |
1 W" p2 i0 k& I# N
分享到:  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-11-22 03:25 , Processed in 0.046520 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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