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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
: g$ ?) z: {/ J3 z! hmain文件:1 }' u) f! x$ S/ i/ ^6 l# \
interrupt void interrupt4(void)  ; y6 ?3 C5 P9 I. B$ H$ y- [8 x; X
{
/ }. e+ p& [; l0 e. S2 I" B  Uint32 sample;
4 j8 y1 B3 @! Z, b5 V  `. y6 M2 C* p
  sample = input_sample(); // read L + R samples from ADC
- _/ C# m7 e1 V! z% e* j+ _! s  output_sample(sample);   // write L + R samples to DAC $ _$ d3 L0 D* U
  return;
! O) G3 n% n+ C; L1 l* s}
8 d) j( ~. n. T* N5 x3 }! R9 Y, l4 b- K( C( Q% `" a
int main( void )* I; F' G& {. M2 ^
{8 [9 ?- ^' x; C% f) \: t8 |

; j5 p2 ^! i# c+ v    /* Initialize BSL */6 }" Q" f/ T% v
    EVMC6747_init( );( P: ~4 D; X/ c' h6 i% h
        /* Call evmc6747_intr function */
* [) w' W) L& s& ?/ n8 F) D! |    aic3106_init( );
3 M8 ~; t5 G8 y" C/ |# d$ `        while(1);. X/ ?" K! }$ _' I- u) r
}5 ~! R% C+ Q" p
* H) L* {% D; t% u' i" K

, m. N- O  @, vaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! u2 I' E- v1 q# m3 k# L/* Initialize MCASP1 */* s# A3 K/ Q* B  D: M. W. A+ K
    mcasp = &MCASP_MODULE_1;& K& \" I. [) Z8 |# v# r2 N
    mcasp->regs->GBLCTL  = 0;       // Reset
: q& r- F- ]! [* O( ^( `    mcasp->regs->RGBLCTL = 0;       // Reset RX. t6 W+ c+ e6 w- j% ^2 E1 q& I
    mcasp->regs->XGBLCTL = 0;       // Reset TX7 J4 R! J2 d4 r) @+ A
    mcasp->regs->PWRDEMU = 1;       // Free-running( {5 E2 |1 }" m# F, f0 S2 Z* K
   // configure McASP0 receive registers
. v! ~0 [. D) B. z& ?    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
6 ~: u5 W' X  Z& d; L, v    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
8 g, X! k' k/ w+ f- ?. l( u, P& L/ z  c# K    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
! @& C8 U3 E6 w% d    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
* N9 h1 ^  R0 G3 k    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side): i' Q- [1 G% H2 j7 Y9 ], T
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1. H2 j0 a7 O( x  }' z6 u& h/ d
    mcasp->regs->RINTCTL    = 0x00000000; // Not used6 h0 x" w0 l; H. X- n
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
$ F, Z# ~. R( a. G1 e4 l( @/ z, k3 R, I) e: A8 O
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: G4 [6 y/ [8 f, r# H. v, @0 ~  A# k
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
$ Y% b" L1 r& j  @$ e- ]) P1 x    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
8 `9 {# h+ j( V    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
. L1 b; q7 }3 Q    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK: x" i2 `# g1 Y: X
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
0 }. H- s/ E. |+ ^3 ^1 T* A0 S1 ]    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit! I2 e1 J3 {9 M# `0 e
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256: P) ]+ b; h8 [3 E( O% |: K

' g/ }+ b# E; e9 Q    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN* y  Q4 [1 J6 H
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
  \2 I# I9 a8 ?5 X- D8 T$ V    mcasp->regs->PFUNC      = 0;          // All MCASPs; z" G9 H$ Q. O3 ]0 l6 l0 M
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
' u2 W7 f. Q$ n' ^0 b7 M# a- D0 W" \  A- n
    mcasp->regs->DITCTL     = 0x00000000; // Not used
  Y6 @2 Z+ Q2 W/ l; n5 [4 e    mcasp->regs->DLBCTL     = 0x00000000; // Not used" f2 ~( q, S+ V
    mcasp->regs->AMUTE      = 0x00000000; // Not used  a! n; P( j7 z( {* r4 Y8 c/ S
8 l/ `$ u3 W9 }; Y
/* Starting sections of the McASP*/
2 G! B; E. v. ]: j6 k0 f% ]0 D    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
9 O1 C1 j* X4 ]7 M    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  $ M3 |/ a: V- `' s( v. I
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 3 ?8 t3 [$ V1 R& G0 _2 {
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );0 j% l+ ~* r+ w' O( I
6 j4 g5 q1 @0 D! q  d3 E: \5 s
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
. m, i0 O7 B: q# h' S- ~    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" a4 r& [0 w( Z6 w( p
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; % C% W+ T( x4 M+ h% w9 r
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% O0 R( Z( d( c5 a" s4 O) Z
. w, j6 S* o5 S9 N7 E
    mcasp->regs->XSTAT = 0x0000ffff;
! g- V8 v% X7 Z    mcasp->regs->RSTAT = 0x0000ffff;
3 p# Y5 H6 J- X7 f2 d4 C. [' L, ^$ z7 W  @) `
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;2 w, W7 ~4 w0 A0 Z- J9 _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
- M3 g- u, {" w* U" b% @    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; 9 k" S9 F) f$ o% |: |
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
3 j% v. V& r# L$ X0 o1 L" W) c' W2 ?; ?. }+ I
    /* Write a 0, so that no underrun occurs after releasing the state machine */
' v( g6 X" f; J& A9 t2 d8 B    mcasp->regs->XBUF5 = 0;# O8 }) ^- e5 p1 f* d" P- v8 R) G6 T
    mcasp->regs->RBUF0 = 0;( `! J. u/ z7 V

( r( }3 f* I$ z1 Q    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
* C1 z* S: x3 |) O    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );9 T. Z( z+ y, z
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 7 n5 q; Y( L& y+ ]1 _/ ?* h( ?- {' \
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
# t/ z' _: [" _
1 L5 ~- k6 w; e4 K& l2 M# {    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , D8 B" @6 Q  }" _
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );1 j+ k# |6 x6 [9 G0 k" Q1 S
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
  j7 Z- L: [% _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# d9 \9 F+ u* C# I" O4 X# r$ P- O/ T
    CSR = 0x0000;
1 h( M$ N$ v7 O9 E$ u: c6 `8 T    INTC_INTMUX1 = 0x3d;2 J6 a7 @" F: Q' {
    ISTP = (unsigned int)vectors;
- h0 j4 Z; ^1 I( q+ _9 y    ICR = 0xFFF0;  / h/ x( H- d" v/ z( q$ ^+ j
    IER |= 0x12;  3 Y" Q0 @$ c* Z) |( l! r
    CSR |= 0x01;  
; n+ H) W) q3 t* J  ]
) X& N$ c1 j1 ?. s8 ~' o
8 m; i; b3 v# c
8 Z: Y* K! O% D0 h" c) p还有就是两个输入输出函数:/ r. e/ N, U8 e% y2 r
void output_sample(Int32 out_data)
: N$ k4 n' k; |2 Z1 R" k5 x/ z8 C{7 t7 U( V- f  z: X
  AIC31_data.uint = out_data;  
8 C6 f9 x' u$ o6 K7 [1 J/ `1 S4 l  MCASP1_XBUF5_32BIT = AIC31_data.uint;
; @9 Y0 d5 Z" ?}8 h; O  n4 \( \+ f7 D$ S6 [& Q
% K4 |& o1 [& i& F* D# K
Int32 input_sample(void)
" L3 i( H( [3 {, X/ v" M{  + p! Z' t4 M9 N- U7 A; [
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
5 B3 L! R* Q9 V  return (AIC31_data.uint);/ y$ f5 `+ f" j! C1 D
}
- }& J; t7 T4 ?4 _0 o9 b5 [0 N5 I( w/ C: G1 B
分享到:  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-28 02:48 , Processed in 0.041567 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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