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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 \; s4 b. O0 \" @0 Vmain文件:' D& s" ]: j2 j
interrupt void interrupt4(void)  1 O2 f- ~8 o9 E
{: P% p# }8 ]7 _- h) d9 A
  Uint32 sample;
6 s- I+ f6 i* F/ h$ W
% t: g( c* N( `  z' U  sample = input_sample(); // read L + R samples from ADC- h0 u) Z8 }* k- J; B7 B/ u
  output_sample(sample);   // write L + R samples to DAC 2 ]8 u7 l# d" M9 W+ M/ x' j
  return;
+ g  @. p2 H2 x5 O' y" F. U}
9 E3 }& {: Y; M; t( ^  n- o1 |4 O; T3 A
int main( void )
/ G% {3 C7 O% y" V{2 _, v  v8 U3 m0 t' p& Y

4 [6 q3 [% M6 d8 f( v! ~    /* Initialize BSL */
0 p$ |0 @, C$ r    EVMC6747_init( );; W, }" y+ y: Y5 v$ B8 o3 Z# z
        /* Call evmc6747_intr function */3 a' _7 Y! _/ h2 |- @
    aic3106_init( );
4 e5 }5 P0 K7 U% @5 {8 ]7 G        while(1);9 H5 P) o, T4 i2 X6 d
}  S2 J8 c7 |  ]9 i4 `& _# o7 n* Z

+ n' H! L/ z5 d: ?  T' n  ~9 F0 V8 [1 t) u/ q5 Q. C
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
/ {4 T6 q" q7 e5 c) M; V- ^/* Initialize MCASP1 */1 h2 o0 `( p7 |1 Q  y0 H% L3 O
    mcasp = &MCASP_MODULE_1;
( [" I' B( r) t6 ^    mcasp->regs->GBLCTL  = 0;       // Reset7 ~% l% w. J# K
    mcasp->regs->RGBLCTL = 0;       // Reset RX1 e9 O0 U  [% {" e6 n
    mcasp->regs->XGBLCTL = 0;       // Reset TX
+ {8 h/ @9 D2 @& U* s3 x    mcasp->regs->PWRDEMU = 1;       // Free-running
8 W7 ?: c! h0 P   // configure McASP0 receive registers8 C+ ~. Z9 g# X  s! s! {
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used& {8 U6 p9 p! ?+ Z6 T
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ D6 v" A9 j1 Y8 E* ^& s    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ E- A  E; U  N0 t
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
  l2 J/ J8 v/ ~( r8 W% |: X    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)/ g( [! j, v7 n- S- t
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
4 W* G, ^: k6 Q    mcasp->regs->RINTCTL    = 0x00000000; // Not used( }! z- \% ~* c  R% A! s! w% v4 B
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 N4 o6 L: i* B/ X% [& G) s! y" d( B+ T3 J  u
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
5 q" G% Y; Y! Y5 S- {3 Q    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
# Z  R$ p6 Y$ a) |    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word9 U& `9 A7 k8 u" K" U8 C
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
: m! @) p8 Z5 V. r' Z    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. P9 G1 `9 a8 E% o2 ~* t: A" H    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
( V/ F8 m# A1 b    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit4 D( F$ p: n! R. M; C+ X
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
9 C6 d$ p  c  p' q  }/ c  l4 Y* P2 j1 m
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
% D) A: F1 {' f/ k+ N; P2 I5 A    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
; ~& p8 r2 \3 b) W. F8 w    mcasp->regs->PFUNC      = 0;          // All MCASPs
! y7 {, o. O5 x/ y; a    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX18 c3 C% @, Z' W* ~
3 A5 g: Z& @! \0 q6 ]
    mcasp->regs->DITCTL     = 0x00000000; // Not used, }% d: I. Z) C8 J1 S
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
8 l# x+ w; f( D) ?: T- y    mcasp->regs->AMUTE      = 0x00000000; // Not used- O4 b. Y' Y) ]' o+ M

+ l, c/ d& p) }& W$ b2 A/* Starting sections of the McASP*/9 H$ Z; ?0 ^- Y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
6 f# m7 N! r2 y, A# w; V* q- F: q    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ m! z2 z: ^* I+ C% H
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
6 x' C' k: e! z0 e5 d& h    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );  C7 ^# V8 ~, J; x
' z7 c2 X9 l  S0 G# e+ A7 x
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; 1 _1 |0 S5 o9 r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
* Q# K: \$ Y: q: b. r: p    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
/ P& [1 Y- A4 L) @    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
6 z$ r7 z( u" W* D- d3 F8 M) J
. Y2 _3 J- p8 G    mcasp->regs->XSTAT = 0x0000ffff;
% V9 i% ^$ g: S9 G! v4 r    mcasp->regs->RSTAT = 0x0000ffff; 4 `0 g# L( v% I/ n( ]0 P- g

7 J: H1 H" T  L# u* x    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
# l; v- f  w3 N$ z/ O4 j* ~' K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
. `: ?% C) E! G$ w# @    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
- ?- Y- z' }7 P7 |" U    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );% x/ S; `! I$ I* N9 g

( K) A- F# Q4 X& {    /* Write a 0, so that no underrun occurs after releasing the state machine */; Y: M0 p: ^9 M8 O9 P; H
    mcasp->regs->XBUF5 = 0;
9 Y) {! c6 h% A$ J" S    mcasp->regs->RBUF0 = 0;
2 Z! |2 V/ Q1 C: o. g
  o5 s2 v/ p. \8 O& ~/ f) w    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
/ h# c. q7 [$ ]5 U) M8 ~) I    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
' d& G+ X9 z# N    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
$ B& Z( l. y6 ^0 P/ X7 V8 s    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );$ p; ~' i) U9 E0 v, t& [
% o) Q" [2 b# C
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 5 S  \* {2 L, U4 q4 E" l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );: W- l% Z% b. N2 D& I
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  Y+ y# g+ r* I; n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );, ?( D/ U( N- i' l, |4 q
4 O8 v- ?4 J. U9 q8 [
    CSR = 0x0000;& o+ S7 y/ y2 Z2 ~) ?( o/ O. H2 A
    INTC_INTMUX1 = 0x3d;
! Y- T9 m/ \; o    ISTP = (unsigned int)vectors;4 q# b: p5 J+ Q! n" a/ b3 G
    ICR = 0xFFF0;  
0 d" m/ X# q, m( @$ q' s3 Q    IER |= 0x12;  $ l; ]9 y7 _. _" d
    CSR |= 0x01;  * }8 w+ _- }* V3 ?& Q* _
2 B( s8 D2 F( J% e% O% n
! }% i$ I$ m' Z* _" e
/ c1 \0 {( x7 W1 }2 h! Q7 D
还有就是两个输入输出函数:
# @8 i& S. d8 C( Y8 ^  e1 tvoid output_sample(Int32 out_data)
; F1 a) C- g1 C{$ q  N5 s$ q8 x0 A- Y- `% D' C
  AIC31_data.uint = out_data;  
: ^7 P7 I$ R5 w! v# X6 P: F' |  MCASP1_XBUF5_32BIT = AIC31_data.uint;# w8 H4 c. A& @  l' V
}
0 I! r( [1 H& `8 m1 }1 R+ }
0 N. I$ B/ _8 ]1 C5 \- BInt32 input_sample(void)& ~0 x! I% I6 Y+ }' g9 }
{  5 h( ~0 }" N0 i& B
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
6 V3 x' Q! r) _# c$ e  return (AIC31_data.uint);" \: d+ g' k6 S
}, m  N6 q* c; ]+ a; S: [! b+ m

. }$ ^6 p% F3 g% a$ l4 _6 Y, Q
分享到:  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 00:44 , Processed in 0.048188 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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