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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! [0 V5 _7 [$ [$ Amain文件:
8 f) ]3 m6 L0 B% b& minterrupt void interrupt4(void)  
$ R0 b- z( X) {. B6 R9 k# e- F! U{
0 x# s3 S" n& f% S- o2 Z# r  Uint32 sample;) V0 H+ N$ m; j0 @# t! m! _- ~9 r
2 |" Y7 D  c& _3 [
  sample = input_sample(); // read L + R samples from ADC
( T: z0 e! V7 K  output_sample(sample);   // write L + R samples to DAC
2 O& u  r5 O6 J( l5 T* l  return;
3 Z# R7 p; F, Z! X. h7 Z, A7 Z}
  S. [  q- o9 [# g
$ V5 k* G  R  @% @% V; fint main( void )
* Y/ m2 {! O9 l* k{
  L: {3 z' ]: B1 y& E4 N! j
% [3 p- z; l0 A2 t: u    /* Initialize BSL */
6 G2 ?% a* h, d$ q, w0 \& Z    EVMC6747_init( );
, K  Q1 u% T" _8 V( j5 \        /* Call evmc6747_intr function */
1 H2 h) R4 k0 L) }    aic3106_init( );
! m  l  E4 S  H6 A        while(1);
2 a( A$ Z; {0 I# W" m4 _}6 ^- \- L3 `, |' c9 r

; p  ]( g% r$ Q) J2 o
1 T) |1 C( W" ~  Z6 E3 \* Z4 zaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题  |( e- |- E) a) P# y9 t$ [$ t+ V
/* Initialize MCASP1 */9 f8 i1 U* [( r& k3 @& m
    mcasp = &MCASP_MODULE_1;% b8 }: j3 i% {+ y. |
    mcasp->regs->GBLCTL  = 0;       // Reset  c3 [, k( L5 J5 ^/ N! s
    mcasp->regs->RGBLCTL = 0;       // Reset RX
" s) s7 v8 p- A; {3 x" k    mcasp->regs->XGBLCTL = 0;       // Reset TX, s' t4 G- h  L8 Y7 E
    mcasp->regs->PWRDEMU = 1;       // Free-running! I8 a8 R9 d1 n8 v' c) D
   // configure McASP0 receive registers
/ q( l- q) l, F; r! }  I2 V+ l. K/ ^    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used! m* m* e1 E  R4 p/ j
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus% C1 W/ V* i6 C' T1 l; L' a4 R
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word. r& r8 C. f# Q  q8 l- `; M# l
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side): v% }1 M5 h# A6 R+ b# ]- R+ K
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
  _, G( A  z3 I& E    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
- {$ i6 v" L) W& b( q8 `/ s    mcasp->regs->RINTCTL    = 0x00000000; // Not used
; _; D2 }5 W' s( s3 n& K  k* d/ }0 j    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2566 {: o3 R: H$ i5 A+ Y  z

/ N) v9 @1 j6 c/ u' h6 ^7 G. S    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used  V- o9 W6 p8 \# z. Z9 g
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus3 G4 Y& [2 j4 {$ s6 s* i' F1 m" l
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
7 w7 {& ?$ p$ Q8 S( |* g    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-166 u1 d0 z9 d! X
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
$ t% ~5 B' t. U# W7 p' {8 g% P6 f    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
. K/ M1 M3 U5 E) M$ y5 m    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
! T7 z+ u6 h+ z" R8 g1 P% a    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2568 Y3 e$ G! d0 R/ i; n
5 ]$ x# V# _: m! c( @1 l
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN" a0 I1 G5 T' G! \0 s
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT# e% X, j$ J  G) M# u0 p
    mcasp->regs->PFUNC      = 0;          // All MCASPs
% o. J0 q: V( J) z. {. \. {    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1! q# q. T2 P8 x- n7 T' D: z& N+ Z
- z1 a5 Y% C; m1 D8 {% r
    mcasp->regs->DITCTL     = 0x00000000; // Not used* H' o8 d' h  z9 t+ K
    mcasp->regs->DLBCTL     = 0x00000000; // Not used7 [9 [& w6 q3 r" q
    mcasp->regs->AMUTE      = 0x00000000; // Not used
+ a* B, ~! |2 ~/ S4 t* t
0 _1 Z1 s  x! P# Q) T! n/* Starting sections of the McASP*/  v8 ?: }4 I! B& r2 N2 L: _
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
" ]& O, @$ @( B* _; d    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  8 A, L! `: _! P2 D  F$ q
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; . j" V2 P6 z- ~' [* R. Z; h7 ^8 V
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 Y9 w4 l: V3 p: z6 i0 l1 `

; k+ E% k5 y1 `0 C3 V. U$ U3 j3 ~    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
8 l& z$ n# b% F    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
" k0 U6 h- r* J) X9 y- \6 Z    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; - J. N5 ~/ `, @% ]
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
" G8 P+ t& R- h- ~& x0 j9 V. ]% w  I: I$ N. B( s
    mcasp->regs->XSTAT = 0x0000ffff;
( h$ w) m" `, n4 ~: A8 J    mcasp->regs->RSTAT = 0x0000ffff; 6 z6 K% X& H" @  a; O
& f9 U. I1 P# v' v/ \/ d+ T
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;) Y5 J$ b; H8 w3 [1 A0 h2 ~0 f  |1 c
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );7 q" J/ E( f3 a3 y
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
! p/ K) |: }+ t+ I    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
8 m; [7 o, x7 O: i: S, b/ G
9 q" j; q+ d+ |4 X3 Q: m1 I" t    /* Write a 0, so that no underrun occurs after releasing the state machine */, r1 E3 ^' a6 ~$ l7 M* B0 X9 O+ y
    mcasp->regs->XBUF5 = 0;9 E1 C% T% g5 U; G/ b
    mcasp->regs->RBUF0 = 0;
" b5 L7 C7 ]4 b  e! e$ c8 M* p0 _% l3 a. r
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; 8 a0 _- |1 m: p  s/ `% \3 `
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
0 f* y: @0 G; u9 l) L    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
8 X  N4 B& t+ Z: R) o# [    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, g0 s4 ?. U1 n. |5 P( `" x
  Q" e4 c. P* B1 V    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
9 B# J$ E% O5 T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );$ Z; B1 y9 g# B. O) S! j* N
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & Z! P' _# t, |7 W  _: l1 u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );1 C& Z4 l' [" p% Y% D! J# `' q
5 V$ \3 w. A) x( d  S5 [" G3 M) W
    CSR = 0x0000;! z0 U- H3 W* L
    INTC_INTMUX1 = 0x3d;
; q8 p) \2 p1 d: g3 P    ISTP = (unsigned int)vectors;- W' `0 }% v0 C+ |* C: T! \7 n
    ICR = 0xFFF0;  9 _- [; T  Q0 J8 v
    IER |= 0x12;  
: b0 M9 v% E9 M9 o    CSR |= 0x01;  5 d; t' n# F( h
  w$ q+ r, F/ g. s* \
+ x( }/ R$ [& L" E: C

0 k5 @* D& O2 ?9 ]还有就是两个输入输出函数:9 u; i$ S4 ]5 Z: e- r  ^
void output_sample(Int32 out_data)5 t% ~: W! e* _! A  U, W
{' z% N. Q3 A, o* l& L) V5 y2 C
  AIC31_data.uint = out_data;  
% c& v2 k* S3 ~! @' ~  `, N# c: w7 t$ U  MCASP1_XBUF5_32BIT = AIC31_data.uint;
* m- h& O9 _. d7 c0 K/ \7 l8 U( P( z}
) V) x5 a2 o/ j7 c7 }2 R9 \/ d/ I/ o( C+ l  z: s
Int32 input_sample(void)9 P  i& X; g# x2 @
{  
% t: L& W& u' u8 k8 T  AIC31_data.uint = MCASP1_RBUF0_32BIT;
2 G3 s/ |# I& F5 z  return (AIC31_data.uint);8 e: I/ P( F0 f1 c5 b7 ~" l( ?
}
# X- }1 m: X+ d# ~' B
  {3 N" e2 A( v' e( ?
分享到:  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-2-12 21:01 , Processed in 0.040072 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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