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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 ]' x1 h8 D3 h( P
main文件:! j" ^# |% d- Y  ^6 C8 |# N. |, v) D
interrupt void interrupt4(void)  
6 I8 x2 }+ b6 B6 W8 P+ V" o7 {6 W{1 }) e6 T" [( E: }4 k$ `* Z" h& b! C
  Uint32 sample;
0 \3 L& z6 F# l* v9 b4 ~  \, z+ F! n0 Y8 q; t: v
  sample = input_sample(); // read L + R samples from ADC1 h  m- _6 ]  v  r: V/ S
  output_sample(sample);   // write L + R samples to DAC
9 ?8 _% P3 w. _  return;8 L3 k; s' |. |2 a6 y7 G
}
* X) t/ m( w" ~- D# O& E6 T3 {
5 @6 S$ l, I, H( I! ^* h6 Rint main( void )1 ~1 A5 k) H8 ^1 z# w5 S5 U
{' `& A6 [! u- Z7 \4 W
& Q# {& T- O+ v
    /* Initialize BSL */) D9 [+ ?6 B+ G, E: ?
    EVMC6747_init( );& N* m1 m; f/ r1 Q' {; C
        /* Call evmc6747_intr function */
* [8 i: Y! ~/ u% r) {" g  c    aic3106_init( );
* n6 L0 c1 `- g  I7 K        while(1);
4 J1 [- D5 X) M7 d. d' @# V}
( N* ^$ k8 O# q/ i3 j
+ X$ Y$ _. U$ _2 W
: s) [9 R: q- C# U3 b1 O* d$ D/ N2 laic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
0 X/ F0 u1 {( M. Z0 K3 c  O' d; z/* Initialize MCASP1 */0 P/ j9 f( S# w# F' {" W
    mcasp = &MCASP_MODULE_1;
4 R3 d6 k3 i. d. s! D    mcasp->regs->GBLCTL  = 0;       // Reset3 w8 y: _. E! T2 ?+ V
    mcasp->regs->RGBLCTL = 0;       // Reset RX
0 {) J, E% d# @  Z+ i7 J! m% r' c    mcasp->regs->XGBLCTL = 0;       // Reset TX- V* e8 s; {: g* l% ]
    mcasp->regs->PWRDEMU = 1;       // Free-running
) u$ |4 {5 R& C/ M; w5 u5 Y   // configure McASP0 receive registers4 u; Z" H% G5 ~0 G! y
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used4 c' \# k4 h  D0 e# C# ^
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
. W% D2 e+ j6 U  n$ L0 Y3 n# @% B    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word+ z$ W: d) q9 a9 j7 a+ S( _' S
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, x3 f1 _4 u: L' g$ p    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)" L7 }' I0 O# c6 {
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1# C9 I* t. C" R) g0 ~& K) ?/ X
    mcasp->regs->RINTCTL    = 0x00000000; // Not used7 @% U9 Y0 B" R/ y2 U' B! L
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
6 \% }% m- U( v( S8 e0 G
. U- s, k# W# x' j/ `* S/ t    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used, z1 G. M8 q) b7 t
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
- V' e- K. H+ V8 }. G9 J( N0 _    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word. |" Z. z* _! E7 i% u
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
* V! o* p. c/ s9 s    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
% T+ U" \0 b, ]$ L( {8 E. o    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
9 E% J2 P: ?: e% p4 y; |! h    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 V2 O9 G& T7 B% F6 c( c: n    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 r$ O+ v, L% H* P. @+ y
8 M5 w& A0 s" H  e# H# u& [0 K
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN, K5 U4 {5 s% h+ U
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
2 o; w9 G+ M! v7 {0 o' r    mcasp->regs->PFUNC      = 0;          // All MCASPs
" s4 U: A4 l# g) c& F) E    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1$ n" s" t1 L/ Q
. g: `. y0 y/ j
    mcasp->regs->DITCTL     = 0x00000000; // Not used
5 J7 S7 o4 k/ c$ s2 S  ]    mcasp->regs->DLBCTL     = 0x00000000; // Not used( f! W" a$ z+ U5 N2 K
    mcasp->regs->AMUTE      = 0x00000000; // Not used( [2 u$ g/ x3 K( c8 C

7 e8 w; H9 d) g  O/* Starting sections of the McASP*/3 ]$ u. a! ?$ O/ D0 q0 O
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" C% G3 Z0 W( F7 u  t, K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
  a( ]$ r9 K1 Y    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + |! }! q7 r8 [' g
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
! O; e; X  N* Z' Y! E
0 `0 J- L2 @$ r0 j    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ' `8 O4 ^; N& c: j
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 `. \( B, ^/ ]4 d+ r; I
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
- ]* ?5 F" R6 S& O3 [$ B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );; w0 A' ^- X6 K* _$ x' q

+ i+ v$ ]8 L  |/ v1 R7 O0 J* r# y    mcasp->regs->XSTAT = 0x0000ffff; , g5 N( r& Z  ]9 {, C0 {
    mcasp->regs->RSTAT = 0x0000ffff; ) l# _% Z: A# N& b: G, v0 O
/ Y+ Q5 f& e2 F; r6 N8 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;3 g% ]7 E" L1 I( F, H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
/ E8 K" u1 J( B$ F) _    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
5 }9 m7 ^* [) C7 N% }( j+ \7 `    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );" k. q" m9 e, a- ?- M/ I

: `" ^8 O# _8 h1 T; D    /* Write a 0, so that no underrun occurs after releasing the state machine */& d; Q) }; l/ E9 I# [' \9 V3 f2 I; d
    mcasp->regs->XBUF5 = 0;0 o4 T0 d, ]% ~- Q8 v
    mcasp->regs->RBUF0 = 0;" t& ^7 B9 [+ {& S4 y6 v

* K3 f$ B- ]# P* t+ `' i! t9 t    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 7 H7 W( V4 F) ~
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
$ J  z  y7 ^) b* S& L3 b    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
6 P4 T, K' p* W% e, z) E+ Y- I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
) m. a7 F1 X# e( D3 V6 ?# l
, V* v! ?/ V" M# P" q    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 6 q# x. B5 q" A8 s: a9 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
8 O) C3 u4 w- _7 Y. [    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; * `; j- `- |- S" C6 t8 L9 b
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );& \2 d% _6 V& ^: D& h: ^! C1 R

7 `5 E5 |5 L$ `3 {$ x2 r    CSR = 0x0000;
) Q3 C$ J# k3 F    INTC_INTMUX1 = 0x3d;
4 _% f$ m0 c$ R- A    ISTP = (unsigned int)vectors;5 p' S: a; Z' H: a$ A3 P
    ICR = 0xFFF0;  
2 K/ B, Q1 W' p: ?1 ]7 g    IER |= 0x12;  
9 t( i# C' J& j) a# f# j$ z    CSR |= 0x01;  
% t. V. ~. ^7 A9 p& \; v8 P, A+ L  P& _
, Q4 ~' Z) K) i" \7 ]  ~

. W0 x1 P# g6 B4 q5 D6 k还有就是两个输入输出函数:
7 Z% r' H# C5 ]5 Fvoid output_sample(Int32 out_data): r" E* S# |$ R4 h7 v; k& T1 u
{
  G9 o8 o8 [2 x- Y  F* z5 C  AIC31_data.uint = out_data;  , K& q2 }  e+ P- c- A
  MCASP1_XBUF5_32BIT = AIC31_data.uint;- P% U7 B; S* }1 i. h: n- r. t4 o
}
8 }& [/ O$ s: N) V1 ?/ \0 z+ |
, }- J" i3 I9 m6 y8 @9 c8 a6 S! i. {Int32 input_sample(void)& H; c) c# Z, ]
{  
+ Y  T5 e2 d. ^+ C4 m  AIC31_data.uint = MCASP1_RBUF0_32BIT;
$ P9 i) Y4 n3 _6 `* g  return (AIC31_data.uint);* I4 ~+ [; h0 P5 U( L. H
}6 t( Y* t' S# N

/ C) _' \  i% _  r3 R+ J8 _
分享到:  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-13 16:41 , Processed in 0.038750 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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