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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
  ]. `4 I% G; i0 y8 C/ r; i* vmain文件:
* o1 I7 p1 ~3 `6 Sinterrupt void interrupt4(void)  $ @! V' H0 b$ G0 [; J
{
* e9 ~$ u* J8 P  Uint32 sample;& a$ U1 V& v6 e8 o- N% g

  {0 p) O/ a5 X! x  sample = input_sample(); // read L + R samples from ADC
  ^) l- d/ X/ {$ L) }  R  output_sample(sample);   // write L + R samples to DAC ( }4 ]7 }! s' P- I7 q' ?
  return;
6 E8 y0 D% ^( u}
; g$ z) |8 S2 O
; \" W3 X' j# c( qint main( void ): i0 I2 T: m  H7 n7 Q
{
) h2 E' x# A* V1 g) g5 L  {
! h; |, B4 q$ O/ H9 e5 {    /* Initialize BSL */5 f. ]4 T+ [. {- [1 t' x
    EVMC6747_init( );
; r7 V0 A, H2 |; M; B9 P- @        /* Call evmc6747_intr function */' c. x1 h: W; b+ w+ u( G7 s
    aic3106_init( );
" D3 [# _- [: J* Y. B/ M) p# k        while(1);& z4 l4 L1 b+ {* [7 s
}
% F% T- I- Q1 ]1 G* y8 H( M5 r
7 h  W/ F9 z/ g( }& i& O7 K, y+ F& `
+ t. |* v; I5 W4 A# l; G7 |6 Gaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题" W; p$ q$ g. B$ P
/* Initialize MCASP1 */
( F' l9 _- k" }- n9 q6 \    mcasp = &MCASP_MODULE_1;9 T) ~; n& @) d* n' o
    mcasp->regs->GBLCTL  = 0;       // Reset6 r; s$ i7 m. h3 U2 }- x
    mcasp->regs->RGBLCTL = 0;       // Reset RX
' z, n% m4 R3 Q$ @6 B7 [    mcasp->regs->XGBLCTL = 0;       // Reset TX
  u+ B4 q0 A' f: ~3 Q    mcasp->regs->PWRDEMU = 1;       // Free-running. a3 Y& M; S0 p8 W
   // configure McASP0 receive registers# S' K; X4 c. a! D0 b& j7 W. Z
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used1 ]& Z- I& |: q! @( y
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus) {( {% R6 W+ n0 R
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word* ]) t8 |3 z- M/ h+ U
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)7 C# \3 L! V# S9 Y
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 n- G5 @4 Y, H    mcasp->regs->RTDM       = 0x00000003; // Slots 0,10 B7 E6 u6 c8 h4 b7 W+ d+ u- Z& f# J- x
    mcasp->regs->RINTCTL    = 0x00000000; // Not used
2 A' F  s8 C7 I/ ~    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
/ \# O* ]! A* l* o" Z
4 X9 _8 j! m( _$ w& z' |    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
4 \3 L  x5 Z2 `# V' e2 k9 l    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
7 E0 y' b+ u" b. ?: i) D    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% R+ \# l4 \# M) w0 R% D8 m    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16' ^5 j$ m/ B3 Y# M
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK3 S; \& X' j' C. @. U
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1+ R  b1 B: [" d" q/ p) j
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
% N% c, `: b  K. P7 ?    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256# F8 a7 G4 |5 j. M2 M* C/ ^

4 B0 V. l: h" m! s4 M    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN1 D( J" v5 z. ]- t8 Z
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 D2 s: v9 z' W$ Z+ Y7 h( m9 ]1 v    mcasp->regs->PFUNC      = 0;          // All MCASPs+ B8 H/ A: |! z; j) d
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX11 f0 r# j* m  T" _+ ~' x2 y( Y( u

. K3 _' v  f$ F$ \, A* E    mcasp->regs->DITCTL     = 0x00000000; // Not used$ ]9 n+ j; S8 d$ G* }9 d$ C
    mcasp->regs->DLBCTL     = 0x00000000; // Not used' n! E  I$ V- b8 s
    mcasp->regs->AMUTE      = 0x00000000; // Not used7 s; T) c7 w" C: F1 t
* t- ^. F5 R0 ?- W- I
/* Starting sections of the McASP*/2 J3 T9 |3 b* S  m6 ?
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; * l+ `3 v+ |( y0 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: H) I/ f4 s: l- ^, h9 ^$ s    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
( a. ~( i3 R* c3 J0 M    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, i6 x" g2 z" u5 r' C5 i
# V% p6 |4 G; }! S+ g
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
$ k  f- r( v/ T) \; @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );6 S) O/ L; b6 ~$ M0 [, H4 ~( \9 `3 a
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
. m7 R, k) p& R8 X; n    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );, Z0 d, B/ H8 _4 R0 v
( f* i- Q1 D3 f
    mcasp->regs->XSTAT = 0x0000ffff; 5 e. r% z# m7 _  R; f( i
    mcasp->regs->RSTAT = 0x0000ffff; 2 z) X+ p  e; n6 {+ e- g* C

0 J+ {4 W+ {- N9 X    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
$ _* A3 G# G8 z; G' x: ]6 H: h    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );+ Q  C7 r# I/ g8 K: ~/ E
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; . _: v2 ~/ s$ H/ m, Z( `1 B4 E
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; c0 ?* c+ I% Y/ e5 U4 B2 n) |: A5 Y+ u) r* m
    /* Write a 0, so that no underrun occurs after releasing the state machine */
- Y6 ^+ d% R" R6 ~) r- U) {& Q" M$ R    mcasp->regs->XBUF5 = 0;+ \6 ^3 {- j* @
    mcasp->regs->RBUF0 = 0;' b6 i% ^. ~' w5 q7 k
/ m8 @1 c) M) c/ c- u# `/ p* B
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( d7 t. f. j) E+ W' {
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
- H% @+ i% M' h4 V/ O# C& R( L    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
  m( J7 k! E4 w9 a" [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
8 y/ j! T' \5 k# Y# e4 n% j$ K
3 T$ w; w' B3 U% L3 s    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; + i$ z' p, V) Y3 g
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. A) w1 C" m* f% W6 m    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % h  Z$ x8 ]+ U8 a
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
0 `  _+ n3 T" C( W0 I# l- t/ v9 r$ ]! }% ~% i; P& y
    CSR = 0x0000;
' c8 Z' S+ X7 }/ z    INTC_INTMUX1 = 0x3d;
7 r) ]) z/ S7 m# A! s    ISTP = (unsigned int)vectors;
) o% b4 V0 F, l) b) B8 E4 m    ICR = 0xFFF0;  
/ e' ^4 H3 }& X( Q4 |" \0 Y5 ^' \    IER |= 0x12;  
: ]3 Q& K9 g- \4 A! E9 P% K    CSR |= 0x01;  
4 U6 `, A. y2 Y4 q% ]& p6 ^1 F) ?$ _0 \; q; V

% W  h3 i. z5 ?' \! @
/ s& a1 h; P/ ~& l' z% s还有就是两个输入输出函数:
1 b/ S8 S& B2 [4 ]void output_sample(Int32 out_data)
# R1 Y( L3 `7 c2 @{, K/ V3 f" i+ B$ b
  AIC31_data.uint = out_data;  
& q6 ]+ R. y8 |7 a3 ?/ `+ A( v  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 Q! G" C5 Q* v. s}& _: r, X$ ]5 o% ]( U! j

; n. A2 w; Y4 L, cInt32 input_sample(void)
! g/ F# V7 {: ~0 U$ `+ y{  
, v2 z/ V( B/ R( i  AIC31_data.uint = MCASP1_RBUF0_32BIT;, O0 F. r7 B  l% u. l0 S9 e- |  u, q
  return (AIC31_data.uint);! d; X: P2 i) _/ j8 e, }* c6 B% p
}/ W. `6 U- Z! w% ]6 O+ c  ]2 R* }

1 x% {# I5 g: e# Q- v1 S
分享到:  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-3-9 18:34 , Processed in 0.040855 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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