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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 g- V* s1 p2 T! b! o/ t; {3 Ymain文件:5 c$ a" E  P# ^" K# g# s9 t) [
interrupt void interrupt4(void)  & G3 y) ?" k  Q. g5 z3 F% L
{0 X$ a' G/ I8 P7 i! v
  Uint32 sample;
  b. L( H! K! v( ]# N& M! Q! g9 W) e  A& d
  sample = input_sample(); // read L + R samples from ADC
# d6 R# D( j/ x9 [) R1 d5 E  output_sample(sample);   // write L + R samples to DAC
; Q4 w$ p, r) V+ V4 F  return;/ o* M. u) d: B2 S) f. v2 \. T2 Y
}' c- d/ o: P; U
8 U* ~2 y" v1 W/ [
int main( void )) q( g' ?9 H! a- p
{8 P' T5 f2 A4 r! `0 Z& O
* \- `$ F! `; E+ }+ s' ]. I
    /* Initialize BSL */
/ T; d7 V3 j0 }% S  P7 Q    EVMC6747_init( );: m0 X4 O) L2 o
        /* Call evmc6747_intr function */5 p, c. E  F5 b& l- y
    aic3106_init( );8 Y' S* ]+ O+ v4 Y/ r
        while(1);! v1 r" l. d3 W0 S6 u3 ^' G) a6 H
}/ X8 ?: E9 ^0 a
+ _. v2 s- [4 J+ x

* b: X" S8 ]7 A) O+ \; z7 ]  Q/ laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
* y8 p8 d: d- M, f/* Initialize MCASP1 */0 e- ?  E, I; t0 a+ n
    mcasp = &MCASP_MODULE_1;
$ y3 b: `  L% }9 |" z$ x4 K" g/ t8 [    mcasp->regs->GBLCTL  = 0;       // Reset
$ t8 w8 j: k/ @; j( v3 o    mcasp->regs->RGBLCTL = 0;       // Reset RX5 x( K) n: N/ t3 D1 m/ {
    mcasp->regs->XGBLCTL = 0;       // Reset TX
- l, y  m9 H: f7 H( z3 g    mcasp->regs->PWRDEMU = 1;       // Free-running+ l' \4 t! s6 h2 M
   // configure McASP0 receive registers
7 P/ L8 Y) \7 N! q2 R4 Q+ P, o/ }    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
3 K% d% `3 L% X. e    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 t' v/ x# A: L2 W+ a% Y' G
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word5 |# Z1 x# d' Y7 J6 o
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)- s) K" p1 w. a  j3 d
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)4 E/ c- v$ f0 j# ]
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# f4 O9 J( ]. D5 r3 }1 L
    mcasp->regs->RINTCTL    = 0x00000000; // Not used" p8 A1 p! ?* j8 a$ Y
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
' _( r) k/ S* C4 g& L/ h2 G+ G# E$ |  H3 ?" }3 F7 `
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used4 N' h) N4 O3 H4 _& u* L
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus# K0 W8 G" i9 a, Q) A1 Z
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word7 H+ T7 D) p" U  I
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16# z+ ~% o$ t0 U' x: l
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK) F$ A2 o4 R1 e
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
* S. T4 Z* q& Q' V+ r4 B    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
9 z* a& j  f6 q. ^: D  ]" b    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256+ [6 [/ D, p! r2 g% n2 r1 |8 m
3 j/ ~, Q4 e8 R
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
/ Y: E. c# u1 L5 _! `    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT$ h' Q& N8 y" S3 x2 _
    mcasp->regs->PFUNC      = 0;          // All MCASPs, a4 x6 D+ t$ Q. z, G6 |7 R
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1' G) O( g) D0 N5 g, c  {8 x
/ W  l2 {! _. Y! T/ W- O8 a
    mcasp->regs->DITCTL     = 0x00000000; // Not used
+ z  T( q. m# T    mcasp->regs->DLBCTL     = 0x00000000; // Not used
0 L0 o) t, A' }9 D! Q- l+ y    mcasp->regs->AMUTE      = 0x00000000; // Not used$ F6 P$ w/ [! M* n2 Z
2 ?  z. f2 n5 T2 ~* v
/* Starting sections of the McASP*/
2 z. C1 ]" [9 t. c8 k1 L    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , Q9 H: h, L: K0 G
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  / Y* m. t; G4 _# k0 J
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 J' X) z0 T. C3 F" r    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );. p5 x& o: _( J: L3 d% }/ A

7 Z; o* v# b5 w( F- @8 u    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ t5 }2 K7 `  X' f6 n) j! g    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );; u+ L6 }: q4 z. _9 j9 Z( B' d
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % [9 W  I! M9 G( m7 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );+ v$ K; `' Z0 W& t( A' {
: M" X% I5 C+ P! H
    mcasp->regs->XSTAT = 0x0000ffff; - `: w& \; m0 C2 X8 [
    mcasp->regs->RSTAT = 0x0000ffff;
2 ]: w2 |' p9 l9 j+ }4 T( ^! C) s, V; x7 K. K8 G
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
) l( T* ^% m2 j( n9 d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );5 @( K( P, @# X
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;   T5 \1 i. k8 @" Y
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );9 |7 Y# ~. ?. n; w: S+ E

) P* |/ V2 ]- c% g6 k/ F  g6 B  [; l    /* Write a 0, so that no underrun occurs after releasing the state machine */
. \1 \. e/ T$ h; p    mcasp->regs->XBUF5 = 0;
: r" t; g* W9 C2 [; A    mcasp->regs->RBUF0 = 0;* v) i4 J# e  Y! L0 r  _5 g
0 x; [  F( D( o$ u% C
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
3 f2 a- G0 u& u: Y& q% O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );+ `$ A. V4 |, o2 z8 @( ]) j3 x
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
, T9 ]( A9 X; ^  s, r3 }; f    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );0 n# z+ v1 f9 `; g) \9 ^

+ x( {+ T8 G. R7 H    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; " Q& p+ E: {0 a7 f
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
0 r: X) ?7 s3 l, p+ G    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
8 j$ T/ ^( s  I5 R. v6 {& u' t    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 [4 P! Q: B; S; ~+ }: r
/ J8 y6 K6 p/ a1 w9 h# Y9 ~
    CSR = 0x0000;
6 w4 O) z  \2 q* v. l  X0 Y* L" B    INTC_INTMUX1 = 0x3d;
& T! I, @1 U- ?    ISTP = (unsigned int)vectors;
& {5 x* \7 p& r    ICR = 0xFFF0;  7 W- `$ v( I5 C6 l/ ?
    IER |= 0x12;    l  o6 Q1 p4 g/ ]8 h" g
    CSR |= 0x01;  
) P# r* h, J2 u$ k+ }6 |: Z3 s! j* o  ]7 r
  k! B# W8 w$ e9 R6 u8 ~8 n

4 n8 d# p" M# I7 V4 @  A还有就是两个输入输出函数:
1 [8 v& q# Y1 w9 y9 m9 Q1 v. E: jvoid output_sample(Int32 out_data)6 }: a$ Q7 Q* E2 T) k) P
{  q" |$ s+ a$ T# `
  AIC31_data.uint = out_data;  
% R  F0 k( A+ |( t" `+ A  G  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 }9 h/ [! I# f( R) z0 a6 i( ~}# y; }- o; R( Y2 n8 ^" K. u
# X1 r, z+ b! B
Int32 input_sample(void)
2 H$ z! M# F+ F{  
; j) m# p; g- m) w' [/ }  AIC31_data.uint = MCASP1_RBUF0_32BIT;
4 v% D' r; T4 H) s3 R  return (AIC31_data.uint);
, e, Q% ~6 v: l% z  ]}& K3 E0 G8 N, U% l+ {
& X0 h" n! [$ T3 I
分享到:  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-26 17:57 , Processed in 0.039880 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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