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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:; G, J0 v' {! b) {# c
main文件:
' @' e, f" I/ m1 v6 N5 ginterrupt void interrupt4(void)  
% w% W- z$ W# o7 `3 J{4 Q( _" j) Q. K. }
  Uint32 sample;0 C' h* g7 V" p

. ]4 C5 g& ?, v' ?9 C: n9 [  sample = input_sample(); // read L + R samples from ADC7 v2 b% ~- C0 u* `# A* q* u
  output_sample(sample);   // write L + R samples to DAC , J' G  M# l/ V) C; t
  return;
% H' B( f& L) w3 y}
8 V5 X' |1 i0 N! c" V0 E, j  u
+ o! g8 Z1 w2 g# j- v. B! Rint main( void )2 P: Y. ]0 A1 V8 C. V7 O
{
4 t. x, s8 Y1 q2 m9 ]$ Y
, V2 n: j8 h) m# O7 T    /* Initialize BSL */
! H% C  G1 L$ ?& d6 N    EVMC6747_init( );3 y1 T  u; ^- ^- P9 l
        /* Call evmc6747_intr function */+ [! z; n) X. Q! ]; {; W7 d, j" l& ~/ }
    aic3106_init( );. e2 n$ Z  N. V* h$ r7 q
        while(1);
. v1 x8 c' Z/ Q: e}
3 E4 Y& m& i0 M# r  f6 F7 K: h7 I& b) y& `
; f: o+ ?6 g- Z
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
+ [! x% r9 p2 m0 f; t/* Initialize MCASP1 */
" Y! S$ ^3 `  \! t    mcasp = &MCASP_MODULE_1;
5 t! H, A& r8 Z& B7 `; z/ c    mcasp->regs->GBLCTL  = 0;       // Reset8 [3 m0 t0 }: P6 u. v, v% w6 Z9 `
    mcasp->regs->RGBLCTL = 0;       // Reset RX. S- Y  _! Z5 q8 s
    mcasp->regs->XGBLCTL = 0;       // Reset TX  P* x# ?8 q5 Q: S+ G) J9 j
    mcasp->regs->PWRDEMU = 1;       // Free-running1 k2 Y, R, ^: }
   // configure McASP0 receive registers2 J: ^, h; ~7 I- |8 }; o$ P: x
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used; s. Y9 m* j- D* X0 E
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus& j5 g/ D2 ^$ E5 Y+ p
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
: R+ [. t0 m  V( _+ g    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)' Q6 j; M7 L3 G! e  B
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
; G! F' E" |8 q; i( z* y3 h    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) X0 w3 T* s. c" r
    mcasp->regs->RINTCTL    = 0x00000000; // Not used! p0 J8 R; E8 B: E1 U
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
% w8 O6 F7 v& J3 v! ]* k% i
8 e7 y7 \7 K, ~/ \/ ~1 P    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used: k; \, q9 K- V3 M1 h
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus8 U" n: K3 S) i( \4 W
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word6 n4 j3 y7 a! d; Q! l8 a7 q
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
( _# `  j  b; P2 O3 \7 i    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
* K3 E' k( p  e% J% ]    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
1 ], ]- O' X0 Q( c# w$ x  ~% O    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit9 A" v3 S. `8 V
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
, b1 d' V  }" y5 ~
) `6 t1 M1 y. D2 F6 c2 A    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# R4 X' }4 ^- S1 F/ s% q4 ?
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT3 G( @# u  P( Y: ~$ [/ {/ `' o
    mcasp->regs->PFUNC      = 0;          // All MCASPs  T* a8 R9 M* C6 j! ?$ d, ?
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
5 P: Y" R6 @5 `2 Y
- |2 n  h; {. e    mcasp->regs->DITCTL     = 0x00000000; // Not used
. ?9 h1 G7 Y. O& A5 @, e) \% |8 L1 C    mcasp->regs->DLBCTL     = 0x00000000; // Not used
5 C' E3 q: P& Y0 }    mcasp->regs->AMUTE      = 0x00000000; // Not used( z" }" ]% o8 z2 e% v
: u4 I1 T6 ~! j0 ~: d
/* Starting sections of the McASP*/
1 _, u* ~1 U5 K9 v    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; # c* y  n4 B# m9 [. @+ {* ]# R0 J. r
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# H8 j/ c* a4 N. l  _& J' [    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . R- L: \+ M% W# w
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
* `+ w7 }7 r3 O9 \- _' z- R& K3 I" o
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
; ~9 {# B; d3 Z! h/ |1 w3 A    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
3 i+ a# E7 Z3 W% X( o* X  `3 G0 |3 I    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; " v+ K' T# ?2 N* p
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );5 ^3 k( y: {9 F0 ?$ M" Y
  o  Q2 M* U: [: w, v+ j' J- T
    mcasp->regs->XSTAT = 0x0000ffff;
: Q) j. U4 H4 d1 K# y' V    mcasp->regs->RSTAT = 0x0000ffff;
6 s3 D* |2 E" K$ o3 }9 M% k
8 @' F6 A2 ~$ A8 L: p# H: N4 L* G    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;9 R% o' C% j# G8 O8 K( ?
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 I+ e. X4 s- e% L. j; e. a    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
1 ]: b* N0 u9 s( g1 Z    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
& |/ D, e! U9 Y$ R/ n) s* `( s- Y9 {8 y2 b# I
    /* Write a 0, so that no underrun occurs after releasing the state machine */5 A  r; K  ]% T. z# a
    mcasp->regs->XBUF5 = 0;
/ k4 R! |* V/ W. e    mcasp->regs->RBUF0 = 0;% D3 g" q* o1 ]; s1 N

* c+ n0 ~. |6 E! ?: N8 h    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 6 ]* k: a. L  S2 ^6 p
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
6 c# j1 G/ U4 T    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
# z# g+ T* u# d    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );9 [8 g; |! h% O* w/ u
( H3 X, R7 y$ u* S
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; , Q  P1 J; H1 ^
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );5 g8 L- e& k1 W4 {$ S1 l
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 w( K3 h) w  P7 v    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );2 N0 c5 t) N8 Z- x" d  J  z& m

" f2 X% w: e) n* A& B    CSR = 0x0000;6 C' g, F$ X, a/ ]. E
    INTC_INTMUX1 = 0x3d;
1 A, e1 q+ F# O, y7 o! l& F    ISTP = (unsigned int)vectors;3 v# D) [0 {1 H+ p/ \/ g5 G% q% ~
    ICR = 0xFFF0;  
+ [& z& V: {# v    IER |= 0x12;  
8 M0 C6 C, ~$ o* B8 B    CSR |= 0x01;  6 u9 p; K5 C' `$ @. c1 m- l! d

% B8 F% i8 W$ i1 [$ [3 c& }8 S0 B/ ^6 S1 q0 D6 x% P+ {% L

- G, \' M8 d# a. K4 _; g$ }还有就是两个输入输出函数:
+ T, h/ v! V) l3 _  ]. _) fvoid output_sample(Int32 out_data)
9 C2 ^  a9 M; b0 _+ ^; N5 |{$ ^; ~+ P6 |+ x2 q. s
  AIC31_data.uint = out_data;  
$ j& G! o  ?6 x# Y7 [# M: g0 L" s6 |  MCASP1_XBUF5_32BIT = AIC31_data.uint;: W6 Q: `" N9 {- H0 U$ \
}
1 d& g1 Q7 h' Q: `' n2 E0 y4 b# v7 u9 U
Int32 input_sample(void)
) o" e& q+ c  ~- z+ v{  
/ M: f, f( G5 @0 ]$ O  AIC31_data.uint = MCASP1_RBUF0_32BIT;3 a. V* T5 [1 t7 Z
  return (AIC31_data.uint);
& b, y( s' {, G. R8 I( W}
' _, v7 a; N2 V# {; m2 F- t
0 U9 C, s" m! U. ?  e7 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, 2026-4-8 13:33 , Processed in 0.046398 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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