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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
; `( w5 a7 m& b; qmain文件:: \- B; ?, t- t+ s& L# l! u
interrupt void interrupt4(void)  ( R. x' ?; d3 t: F
{
* d5 h" f/ |( E  Uint32 sample;
% V& V% A# k- @; i- Q7 Q0 W9 }6 t# R/ g+ T$ C
  sample = input_sample(); // read L + R samples from ADC
# B& d% R& f7 q  output_sample(sample);   // write L + R samples to DAC
  D) k9 d, X8 E3 A# I# f% i  return;+ Q7 }' `: p' T( D; z
}' A0 f! j) M" w& ]

0 F3 E5 X6 F# ?; Rint main( void )
. ~% M: t3 j: c& W{
6 J2 ~' }% v) ]$ ?$ g1 w/ k
6 I' I" ^& P( l3 T: J    /* Initialize BSL */+ b0 j9 i9 u) ?, w0 D# e7 x! k' }
    EVMC6747_init( );. N' L/ R. a' T' A
        /* Call evmc6747_intr function */6 b; X% P% G$ t7 Y1 W5 j
    aic3106_init( );5 k# S4 s+ t2 R& c8 E
        while(1);
, A+ V" H" B" l4 l5 @# K4 L# W6 W  S}
7 d/ J% J1 Y4 x) J5 X# ^( @( u
4 M  o1 n6 h" A, L
1 o- a  X) c/ \4 o0 u8 N0 X4 R/ oaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题& k2 f  V; @+ [. m+ V8 y
/* Initialize MCASP1 */
5 t# O- t; |: y9 g, j    mcasp = &MCASP_MODULE_1;( r# Q( o( v4 V; o9 l
    mcasp->regs->GBLCTL  = 0;       // Reset
! k& T* H) `# T9 H2 s    mcasp->regs->RGBLCTL = 0;       // Reset RX
& A* l% o- C0 p% i- p* s    mcasp->regs->XGBLCTL = 0;       // Reset TX
2 d% J* G( x; @- K- x    mcasp->regs->PWRDEMU = 1;       // Free-running# H! ^0 d0 [, G+ l5 [
   // configure McASP0 receive registers
8 @" _6 Q4 B4 W+ Y    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used/ X) G$ u5 K) H, Z0 r5 G3 w$ H
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% X+ L4 m  K# s" K: V( s    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word% ]: a( L9 f. a7 A' T! W, j
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
2 p; U' N2 n, g3 a8 b* t    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
: f; j% Q+ }, r9 g8 g6 k    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
& d5 Y: U* q  B, y: v+ O    mcasp->regs->RINTCTL    = 0x00000000; // Not used* C; a9 u4 x% ?* i. [* t) P3 q
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256/ h% S& G; P! X! s: s: W% `8 m( A! |

% v$ @- \* f+ B9 p8 ~1 w7 P& F- R) e9 e    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used6 P$ \( D7 @8 [# i% M9 n$ `# w: O
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
% A2 F; Z% L/ P- B: S+ `' C1 {    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( w+ l9 ~6 q0 M* w
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16& N. F" S8 `4 ]' w
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK1 ^9 J9 K- f5 D3 W( @
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,15 F  t% e+ M4 c. k6 k
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
4 @* Q1 p2 |. F9 }    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 R3 N: H# _- e+ m$ F5 K) }2 l
! d+ S# Y( e: R1 q# _
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
& L5 T  ]2 F, [$ `/ f" a& s% b    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 j4 s9 ^1 o' ?# O  P
    mcasp->regs->PFUNC      = 0;          // All MCASPs
. f$ l" ~" S$ J  w( g    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1. k2 m: {. P) h" v

, k6 |6 T0 }6 e; W: D    mcasp->regs->DITCTL     = 0x00000000; // Not used1 e9 |" U4 d& p9 h5 P  B
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
" M4 x. V' ?0 p3 k    mcasp->regs->AMUTE      = 0x00000000; // Not used# G4 L7 P' b( O# c$ f

$ n3 g7 ^" W( Z! |- [/* Starting sections of the McASP*/0 Q+ h3 J3 o$ w3 n8 u0 e4 P7 n1 ~" |
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON; , h  b5 b% h5 |5 O- L5 R
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  # t! Y, |9 }( n$ d
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; + h% L/ q0 W2 B
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
4 t0 ]  {1 J" P$ p- z. {/ J; V7 S! A) U# P: I3 |+ e
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
- V1 J" }% e# K    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );" r' q3 q  d: M9 a
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
2 B7 T! i- _0 }2 d% O) [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );: x* o) V) x( I( I, v6 Q0 ]6 N
- F, x! a! v+ ?
    mcasp->regs->XSTAT = 0x0000ffff;
: ^8 J" i" [2 M' ^  }3 T. E, A. P    mcasp->regs->RSTAT = 0x0000ffff; 8 Q; @4 `5 j" k  }& f2 m7 K, v! w
! H* y0 A. ?" i8 L7 y, u1 w9 \/ w7 n4 _
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;$ L- M- |& j& c8 l
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
0 u+ ?( ?% `  A% l/ W" M    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; ' j% t6 P+ T7 x6 u, x4 M
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );6 \3 {8 d3 p- h  G) ?9 X

! C' u1 l% F0 L( I( k% \& o    /* Write a 0, so that no underrun occurs after releasing the state machine */
( e6 L- x- b" y    mcasp->regs->XBUF5 = 0;
" {  `+ Q* |( L( P0 J7 O2 `; b+ M    mcasp->regs->RBUF0 = 0;+ I' a  G4 u" m6 p) p% I

: R: E# ?, E: @    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
7 ^  v/ V% A5 F% ^' W    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
) d# ?- {6 L: ^9 O$ M. N    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
" J! u9 O9 y* I- B4 _    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
% {9 e7 X( W' F% e0 o) ]9 c# L+ [- R6 L. ?/ W" A
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
/ x8 `8 T; x" j/ w    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );( A6 \9 t/ t* T9 m0 p& ^
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; % h( a, F  }3 |( f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
; |+ j/ a8 }9 D$ h% ~$ `5 S
! `* [/ D# l( d$ N    CSR = 0x0000;8 \# ]# ]5 J9 q; V4 q  z; ]
    INTC_INTMUX1 = 0x3d;) ^1 O9 d% v: F# b3 `5 V. X) t
    ISTP = (unsigned int)vectors;, W# ~4 @: x% g' J& F! ?% r
    ICR = 0xFFF0;  
5 R* R, Z: u; X( q* t; G    IER |= 0x12;  # R1 ^0 w0 u, Q& v5 Q/ R$ z
    CSR |= 0x01;  
% H; o& Z1 m, J( g$ X7 o' X' U
& M) x( b3 {4 x! W% J
/ w! W8 D8 @% J/ I1 Y( G
9 H4 z3 D$ A( J( F/ q还有就是两个输入输出函数:. u9 L& u7 k$ A% ^" G1 F
void output_sample(Int32 out_data)
# R" e# R, A5 e5 Y{
& P9 J8 [! s) M! b- \: \: z  AIC31_data.uint = out_data;  
. p4 b+ s: D4 _4 _  MCASP1_XBUF5_32BIT = AIC31_data.uint;
9 o4 _. t% {$ b" b$ L4 b}
' a, m2 i5 a" C& |( ^& \3 k! k1 d$ _7 T2 D6 x5 ~8 T
Int32 input_sample(void)# v/ w: s# j- J
{  
, r9 w1 v  @! d) v% j4 H0 k7 Q  AIC31_data.uint = MCASP1_RBUF0_32BIT;( e% N+ r# Q% z7 j
  return (AIC31_data.uint);/ j$ G6 a+ ^% l, q; ]
}2 O; a6 C9 T# N6 k8 Q& [, D+ R

1 T2 B4 R* A' O$ u: 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-3-15 14:53 , Processed in 0.057335 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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