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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 W1 J$ g7 |: f  w2 wmain文件:5 T3 y6 b5 }8 d
interrupt void interrupt4(void)  
9 E3 n4 D5 T1 u3 i  E{* ]8 E- ~, Q+ s1 s( O
  Uint32 sample;
# c: d  m! l: f4 x* x6 F" }- Z. z) _7 N% U! y/ C
  sample = input_sample(); // read L + R samples from ADC: V5 k/ ~# ?6 u+ M; `
  output_sample(sample);   // write L + R samples to DAC
8 Q( V7 u' ~% A$ w7 u& q  P& O( Q- w  return;
& S* f: z% B7 ~' q) k}
: I' g, u0 X) e! M6 m! _4 `3 n7 R; ]* L( r
int main( void )
: h& `3 m5 b# u{
6 C* p0 w8 \1 D: R* \& T. w1 @& a9 {3 [& d% w" a$ ]
    /* Initialize BSL */1 H* u7 I2 o$ L$ a7 F
    EVMC6747_init( );+ J0 p1 q/ a6 l$ R: [: D0 r/ _
        /* Call evmc6747_intr function */
- e& ?1 m7 O! p4 V    aic3106_init( );5 H( C1 y. u0 M
        while(1);' I0 i+ W$ I7 x* G5 X* @; b, w
}
) Z$ `3 e: B3 ]9 \3 u& j9 O4 }5 b: J; G

- `. H5 F5 Y" M' r& Jaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  k& L( Y' R1 |5 n5 @' i
/* Initialize MCASP1 */
! B& j, m0 k/ g1 s. j& x    mcasp = &MCASP_MODULE_1;
  T# B1 C, Y; N$ P    mcasp->regs->GBLCTL  = 0;       // Reset' ^2 v! L  H. p  D, X( h; T
    mcasp->regs->RGBLCTL = 0;       // Reset RX- r% s8 t( d! d+ \
    mcasp->regs->XGBLCTL = 0;       // Reset TX* ]/ V) e: ]. y
    mcasp->regs->PWRDEMU = 1;       // Free-running
! Y/ A! ?8 c" b+ |7 g   // configure McASP0 receive registers% Y; k" A% ^2 [* T, L
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
/ U2 q; v3 e" A( K    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
& h$ ^1 e5 y7 A# Z2 j( g    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word0 }. f7 O* k4 e
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
0 v" K3 G. X0 T6 a3 ]    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)- x* ?1 C4 U  q7 s  k, ~
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1! a, @1 s" Z+ h/ B
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 b7 W) d# f, \8 r  B' `# l    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
& x2 `% g6 d0 v  o: ^8 e8 X6 h+ Y
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used2 R8 V6 M# R. u: I! M2 X
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% M5 ?! m- n: H& s
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 E8 J  s  _/ l* {4 N# {1 p
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16% |0 q9 a1 i/ h5 T7 v
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK* f3 w1 D% n" o" i: W" U7 G1 D8 S. Y
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ M( c2 K& J5 f3 M7 A3 ?
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
( \% u/ i7 W" a7 c" i6 \    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
7 S' Y5 G2 b9 a2 ?2 y& O2 s8 U- d1 ]
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN0 e) y: M8 t7 V5 B! R" o
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
& j6 r' Z$ ~0 U1 j    mcasp->regs->PFUNC      = 0;          // All MCASPs
7 U9 |! x( X$ X* `, N. g5 I    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
/ O/ u3 N( T0 A9 J* S% A
; }2 v1 r+ ~  _* D: Y4 P    mcasp->regs->DITCTL     = 0x00000000; // Not used
# E$ l* p% ~0 @) O" G4 U    mcasp->regs->DLBCTL     = 0x00000000; // Not used
3 W% P9 y; q* s2 X' h" B    mcasp->regs->AMUTE      = 0x00000000; // Not used7 a; _* I- [% \+ Z
7 a7 i) C$ i5 d1 a
/* Starting sections of the McASP*/; ]+ I6 f: f8 _5 J, T4 q8 W& q
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: d( a" h: {3 e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
! o5 @# n# Z. U' S$ i( \, J) g6 h    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
3 A3 m# D' \) A: @; H/ o    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );! c( N- j) ?7 K) C2 b
( s. O  E% U( @* A% T
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
4 L; F# a' [, y9 D    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( X5 g1 \5 V2 n5 y
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ C  D1 U  ?6 y1 t+ c6 C% U8 @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );0 `$ }% i% X% x9 @% v: o  |+ B
0 O) @" P2 n+ [  N" ]0 r1 `  ~
    mcasp->regs->XSTAT = 0x0000ffff;
4 W, \6 S- @7 r- u    mcasp->regs->RSTAT = 0x0000ffff; 8 D. [' g" u- x) Z, R1 p2 D8 m

0 x& A/ m* S/ t) Y% k    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
- M+ ]2 ?. O) b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );% c7 w( g8 l2 x% D: E2 G. C
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 6 c* @8 j2 z3 H
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );$ _5 y7 ?' o% N! K: R. A
4 x( V$ y; g7 M
    /* Write a 0, so that no underrun occurs after releasing the state machine */
( o/ L( t0 U" C+ L    mcasp->regs->XBUF5 = 0;
1 H' T' K9 d1 i    mcasp->regs->RBUF0 = 0;
9 N3 n/ j* Q8 p! M( i+ p+ N: C# C- g
2 y$ m' R  a; q: I1 r9 u- ^    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 D1 f+ w, `; w' C" o    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( g. O6 O. i1 H7 q$ x1 R  J, n    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
/ `( g, F: u- n4 K    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% H( d2 i; Q% L1 X5 k* Y+ T) c& @1 B- n! ]% V9 U
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- j$ N; o* Q. x1 j, `    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );9 i; _1 w5 p3 m( u
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 m" {  F2 H& Y& Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );( K& \/ b4 M8 ?% R* R/ r' t5 j( V

- \$ V3 ], K2 N4 B7 m3 y    CSR = 0x0000;
5 F% C5 b& T' [; X% X2 p2 O    INTC_INTMUX1 = 0x3d;8 {$ s6 o  S& f4 P. m4 ?
    ISTP = (unsigned int)vectors;
; O8 @% V1 ~1 ^3 F, t# B8 x, m    ICR = 0xFFF0;  
  R- J, n7 s* k    IER |= 0x12;  . j6 Q! \! o: e4 p3 b
    CSR |= 0x01;  
) h* _0 L7 q8 w5 N+ ?6 q* H6 M* l, B: Y7 ~5 E" z2 z! T% T

$ Q5 l5 s0 q; Q7 J0 P2 Z3 z' x" H1 c' Q$ v
还有就是两个输入输出函数:# L+ ^) s+ W6 x' t
void output_sample(Int32 out_data)% m* H# j: f6 Q
{
: [2 {, U3 c8 H# v1 @6 c8 a- z  AIC31_data.uint = out_data;  # T1 y) d+ B5 L/ b1 S4 Q6 S
  MCASP1_XBUF5_32BIT = AIC31_data.uint;* O4 L  n9 b% A
}
2 n/ ~. o8 {$ B
% r* g  R3 [2 UInt32 input_sample(void)
* J3 T5 l* z( Q1 `{  
8 J) i/ X+ D( x2 [: \! K* C  AIC31_data.uint = MCASP1_RBUF0_32BIT;2 ~! ]# L( Z+ X" n
  return (AIC31_data.uint);
* s' r( f4 j2 R; E; x, |$ I& `}* X2 M% M+ F2 P1 L' z- y  V( {
' @, j6 k0 l4 V
分享到:  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-4-4 14:03 , Processed in 0.042256 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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