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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: n5 q  c0 W: T' b( t3 Rmain文件:
& M" r# e, O& o1 Z& tinterrupt void interrupt4(void)  " K$ C" I/ [8 ?2 }, c) B7 y5 d
{
6 n7 G& Q" e% p# V8 \  Uint32 sample;. |4 p. W. l4 f+ P! N

: `5 `% i7 H3 A  sample = input_sample(); // read L + R samples from ADC
) n) t! w$ t$ H/ g! L2 Z1 I% Q  output_sample(sample);   // write L + R samples to DAC , [; }4 p. Y) B% k4 v' F" Q( _
  return;
5 g$ ~6 f- ?# L/ `% A}0 c; \# H  z8 d

! D5 d7 k& ?/ ^. Fint main( void )
# U! {, S) L* \, _6 C: b{
- n$ D5 D" y* @8 n* r2 V3 _# t" q( O7 C/ Y; P+ i4 D* l
    /* Initialize BSL */
+ h: F; [# k" f    EVMC6747_init( );
5 \7 H; W& |! M( T        /* Call evmc6747_intr function */
# x8 x& ]2 B8 T" P9 `    aic3106_init( );' p4 p: S3 m3 K; b* }; K+ X' _
        while(1);4 B" R2 o) h% [' a  [/ z
}/ a- Z: F( y* k5 F
" G% X  `" p# q9 @% d+ n) g
3 K7 l0 D3 R" N! D
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
, U! Y5 G. Z) u, Q/* Initialize MCASP1 */* D1 s9 e$ L3 p0 b( m1 l
    mcasp = &MCASP_MODULE_1;- S( I1 s! O; V+ Q1 t4 g% z# ^- x
    mcasp->regs->GBLCTL  = 0;       // Reset
5 n' @- \1 |# U, a) C; o    mcasp->regs->RGBLCTL = 0;       // Reset RX
  @" y0 V$ g9 M8 p; I    mcasp->regs->XGBLCTL = 0;       // Reset TX
, F& M+ @& d) R; l6 u" J; ^2 G    mcasp->regs->PWRDEMU = 1;       // Free-running4 z" v0 J- N$ h" k* d& Y* E) Q
   // configure McASP0 receive registers
1 t: o$ |+ ]& A/ W    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ s3 m  w, K& i* y+ F    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
2 y+ y9 F/ U( n    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
2 l8 _* ]$ s) e8 v; V1 U    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)8 s  z( ^% H# U' `
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
5 `$ r) q* w7 m8 \% j: H- \3 I* |, F' m    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
# I0 q& X) z" T. G0 L+ z0 b) S& n    mcasp->regs->RINTCTL    = 0x00000000; // Not used
1 |1 P& x+ `; E0 E, s/ E    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
* G( H+ k3 |9 H4 e/ R, ]' [
0 I. C3 q6 R, v8 A6 R9 ]    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used/ [1 E7 a9 H% S5 A. B& j( [
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
1 Q) \! B  J: A) L$ k    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word# b1 n, X1 y1 L4 c3 J- Q- ]
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
5 r% u6 f/ M$ {( g$ ]1 T! ?( f    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
, s4 I4 M: m' y    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 R0 b1 j: \; i1 \, e7 E+ s
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, y3 N0 R9 B) a4 y2 N3 F    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 u/ o4 X6 B8 Q( W  c3 l
$ C+ t3 J) V( Y+ \& }% U    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
$ \6 I  y4 k& z) z% U    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT% l4 d- C% r7 g) ~4 d$ f( k
    mcasp->regs->PFUNC      = 0;          // All MCASPs
  X: e3 o5 {6 _1 M& K    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' d# ~) B+ G* v  d7 q/ [1 W) b& y

7 n5 s, A# ~. L7 E    mcasp->regs->DITCTL     = 0x00000000; // Not used2 Z( B* o1 n8 J% v) D: c( k) Y$ l
    mcasp->regs->DLBCTL     = 0x00000000; // Not used9 k, Y. a( C! q  t1 v
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ d& W* x4 }% m% f" }4 U3 g: G5 i0 I* P8 Q  D$ N0 ~4 M0 K
/* Starting sections of the McASP*/
! z: Q+ `9 E: b  E. k- ]# b8 C: }+ T  i    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
$ Z7 y9 E* k8 Z$ t5 E! Z- o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
& @! S& Y8 ]' `0 |: q" G    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 5 P) \: z; I5 _; g, ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );4 V" e' x7 j& U
" F+ b) D3 F  ?  h! `- @& C% O& T
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 ^; I* C3 m+ _1 ^  |. l- }    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );' O! a+ k, c5 j' }0 `! g* p: T
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 r" b  Y: z4 ]" V) N2 t$ ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );( ?) P0 t" e2 b
, `% H$ D, F5 k/ `7 A3 v
    mcasp->regs->XSTAT = 0x0000ffff;   ?- a% u+ E/ f% b9 L3 A
    mcasp->regs->RSTAT = 0x0000ffff; 2 M8 w( }9 i- K! ]# w
7 Z0 V$ x3 }6 h* u' T2 F3 g; D+ O
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ l/ W! I8 E# t" Q( y
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ ^) K. e/ R3 D' o1 N- G+ a
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; % u, c) b* T& [6 U- \0 o" b9 M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );# j) B9 K; y( \6 B' O4 H/ f4 R/ ]: B

# a8 k/ V" X2 ?" a+ ^    /* Write a 0, so that no underrun occurs after releasing the state machine */3 P) Z; u6 V  e( v7 y
    mcasp->regs->XBUF5 = 0;
4 \+ k1 E/ U& c    mcasp->regs->RBUF0 = 0;5 i* B9 d$ e4 ~" N% n

% B8 o$ T: _' r0 w5 Z& d  l    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ; }2 P1 Q3 b; }2 ?7 ?7 {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
4 N3 l! H& u% u- D( x: ?    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 D( K0 I* n* X* t# L" ^
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
! I* U$ d7 _5 A# s% G
6 W0 `' H/ r# ]    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; $ h$ _9 V4 \# k* A# R7 M+ c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
( c) K; Y$ U9 }2 }4 z! }    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; + E5 f3 g- M2 V0 y) ]3 C
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );8 Q3 ^" D. P, G+ Z1 ]: x

2 I( ^! J" |# T4 E    CSR = 0x0000;
% c8 X. G$ P( l  ]" c    INTC_INTMUX1 = 0x3d;) m- ^1 v, N) y" U! U/ |; G8 B* x
    ISTP = (unsigned int)vectors;7 M, ^7 x' n  z/ T2 X2 u
    ICR = 0xFFF0;  
5 f$ ?# n: l7 t2 f    IER |= 0x12;  1 y5 Q/ E3 Q5 _/ s7 y& v7 L
    CSR |= 0x01;  ' A4 q  b) j7 y7 p

$ j$ W$ \: f2 I1 S
0 ?. p( k( _% N, ]
, @/ O! h9 U6 c1 F* [还有就是两个输入输出函数:
$ i6 ^: x  _6 P3 v5 ?# |  ]8 nvoid output_sample(Int32 out_data)
# g, o+ ]. r  P& F4 {3 p{/ ]. W/ X2 x+ Y( s( @
  AIC31_data.uint = out_data;  
% r7 u7 a3 m1 U; S$ F  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. p8 u8 n. }- P, d$ ^) O# X% Q  X}' J  M4 C1 ^# r! a

$ w: W9 h+ a7 L7 `& h0 m0 IInt32 input_sample(void)
9 J+ ~4 f5 R9 m- \, Z% d: A" r% U5 Q1 S{  $ h! y' K& G' O6 N$ `: P+ ?
  AIC31_data.uint = MCASP1_RBUF0_32BIT;/ e( H' B0 s4 h. Z% I# V$ l1 n+ {
  return (AIC31_data.uint);% A( D% D( X- m4 K2 b) s
}
* B5 p% Z4 ]5 l$ C# P) t- @
5 Y( |  h2 n4 }/ 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-24 07:06 , Processed in 0.042238 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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