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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:% H7 K! ]9 I3 |9 `% A- R& h9 n. c7 X
main文件:: H7 o, v) I& Q! B
interrupt void interrupt4(void)  
  d( P# ^$ H. O+ B9 o# N% g2 S  N1 r{' \& e1 d( H5 @  X* u- m$ y
  Uint32 sample;1 x& @- C0 g6 `7 L" _

4 j! ^8 `! A0 z  sample = input_sample(); // read L + R samples from ADC
+ H9 ?  r1 V/ C1 g3 b) q/ u+ E  output_sample(sample);   // write L + R samples to DAC
8 l2 [) X( O8 }9 G  return;
& q: J; o% ?4 {  A( z}
6 m( H& d+ n/ b  |' C9 V; j
: A9 a. E  z  k' Uint main( void )
( C' L4 y5 _* l% ?* r{
9 k) F# i8 b% Q" O' e
4 t5 D* @5 B" p& o# _1 D7 t    /* Initialize BSL */
. q2 I2 _( a3 q% o1 h    EVMC6747_init( );
* A! k  f' c: S6 }8 b        /* Call evmc6747_intr function */
2 k6 e, q* K0 Z& y    aic3106_init( );
% Z% y& a9 s4 X: ^1 o        while(1);; D! N) J/ ~; Y/ x8 A9 \: l
}, d/ U! E* R5 [8 [* c/ }$ g
+ E" _/ L& |" K$ l
8 }8 Q/ b% ^2 f
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
2 ?+ J# b# d4 j7 B. a/* Initialize MCASP1 */
8 [' F( g* V8 [$ y! [5 ~    mcasp = &MCASP_MODULE_1;
0 r/ k6 P( \- L9 _% ^  p; w    mcasp->regs->GBLCTL  = 0;       // Reset
0 D5 w' z. i( a0 E( D. |    mcasp->regs->RGBLCTL = 0;       // Reset RX3 R% }' N! E4 X$ B& M( ]
    mcasp->regs->XGBLCTL = 0;       // Reset TX
5 B6 i9 V+ z' ^( S    mcasp->regs->PWRDEMU = 1;       // Free-running
8 q( B" b4 F' ?$ |- g   // configure McASP0 receive registers
2 K" \8 ~2 V, n$ r+ M4 y9 O% U    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
; @6 H$ k5 t# D$ p+ D: ]6 R    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus' e0 L; Q- l+ q. _! W
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( F6 V# k9 R- N5 U2 s$ v    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- F  _' {, M# Z1 p' {
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side); l8 w# i8 D& n4 O
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1" s% j6 f" |; }. B6 V
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
: D0 a5 W9 V( [7 v, r3 C3 e    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 U1 x/ G- O5 E9 E" _
* U  s8 F/ x8 x4 `6 T( ~3 G    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ _4 L/ [/ L0 r" z" |* d4 l, N
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus0 _1 ?6 n8 j; g7 b
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' \# C; G8 j: C" p& [2 h4 A
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
" F5 H* e1 A! M  M6 K% [7 J    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK+ ]8 E# L+ d3 T( m" m
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
+ P$ W8 }/ a6 ]3 m) ?    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit% u6 Y7 C! p: W
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256& [3 Z6 r9 t2 o; M0 Y! k
* m% G; V/ J1 W2 R8 S9 T; u
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN: E+ G3 |' [% D3 Q- {: n
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 @  n& e2 F( U- @- T% |2 j    mcasp->regs->PFUNC      = 0;          // All MCASPs  i; h% ]  z5 {4 a7 |6 t6 l
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1; b; H8 ]) W# S$ K  B
* a+ F4 z1 d# S) ]" ]
    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 H" J( l1 ^' f7 f% d/ J( `    mcasp->regs->DLBCTL     = 0x00000000; // Not used
8 Q* \. H" }" ]8 P    mcasp->regs->AMUTE      = 0x00000000; // Not used
9 r/ I+ x7 G7 ^' V3 A' A
9 c6 `/ D9 @# h( E+ u! E: R* Y, W/* Starting sections of the McASP*/
5 E: X4 G5 s5 j9 }6 E    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ {5 K) e4 j/ s' E" X7 \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# V) j6 t; ^) A4 k    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
- P2 g6 s+ H( |$ C" _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
0 V5 l7 I9 V# j$ w1 G/ V
) p) `1 W% e2 w7 r8 A( J    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
% t1 l$ z- I; i1 S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
( b6 c7 m+ p9 K8 b% a! B    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
9 k& }5 W" h; a5 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
! l. i. C) ?, F5 ^; B7 ]1 T9 r5 ~
* d: v6 A1 ~9 G    mcasp->regs->XSTAT = 0x0000ffff;
4 X- ~3 d% r' e& E& h( R6 C2 W5 H    mcasp->regs->RSTAT = 0x0000ffff;
: n2 Z& X- |7 P2 T/ ~' p' M# r- ]; B( ?; e2 l5 O. D, v3 Q: `
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;( Q6 m6 ^4 t1 D; Y3 {& m: \1 E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ K6 D+ B: ^: |/ o% p2 Z    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 7 d8 V5 V+ W# S% A" W
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
  x& }; V+ F, X9 u2 ]# E, Z; C) B) x9 I, B/ W2 I# f
    /* Write a 0, so that no underrun occurs after releasing the state machine */  p1 T+ B+ w! ]2 W& ]5 _. Q
    mcasp->regs->XBUF5 = 0;* w( p, S* y' _) V( m7 t9 S, _$ ~
    mcasp->regs->RBUF0 = 0;* u' Q( `; i/ ~
) E' G  h" e, T' h8 U8 U+ V
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; & \- c) w8 u0 Q. ~. l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );' ]" J2 H. J5 l5 H9 E
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; ; g# m0 E/ a# {$ n& G7 v
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% c% @2 A4 |- J1 y
7 y& J" ?& ]' G( ]( X/ t    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
$ v# P, M4 `" [/ ~) y( p  j    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. n; }1 a0 A' ?2 ^    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; # [$ c, C% m5 b7 m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );/ H9 {. [1 j8 b
0 f5 D/ E6 B6 w: ?& \6 N! E) m
    CSR = 0x0000;
/ r2 d! T! c# E  m5 j    INTC_INTMUX1 = 0x3d;0 g) i4 u2 E: T5 k0 Y: j, O. r: c
    ISTP = (unsigned int)vectors;$ [+ {) A" s# X* {5 @( l5 R! r
    ICR = 0xFFF0;  
3 J7 w/ s% I6 Y$ G" [2 l    IER |= 0x12;  
: m: [/ V9 N& m$ G5 ^% c: U( w    CSR |= 0x01;  # s* a8 l0 _3 U9 L

) E2 G0 y( U" i; @; q. X
# V/ B* Y0 f* X6 v
* n/ t8 `  ]" r4 z% U* g. A还有就是两个输入输出函数:
* m  a% g  Y! a  P: A& bvoid output_sample(Int32 out_data)
8 k2 E3 k4 J" L{, a) k# E7 _, J! }/ ]: v( f
  AIC31_data.uint = out_data;  8 g  p0 K% [! @  D  f
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
! Q: x, f" ]3 g% r; ^}
5 ?  o1 |/ O  ~5 X3 Y! Y* x
( b' z' G( m; B2 pInt32 input_sample(void)5 n+ ^1 S/ B. ~! b" M1 ~( H/ ~
{  & ]- F9 ]( M" d  i: v3 k
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
% x5 }+ o4 p9 k, G, s  return (AIC31_data.uint);
0 |$ _8 ^& Q4 R+ J}8 F, |4 q+ Y! Y) M6 _$ C- c3 @
; B/ r# ^8 x; Y& s! R  q7 Y+ G
分享到:  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-3-5 09:11 , Processed in 0.040928 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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