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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
! k, N3 V2 J. X& C8 Wmain文件:
8 T2 [, d: {- D3 z/ Finterrupt void interrupt4(void)  9 y8 y  I7 ^0 |* Q8 y; N! S1 W: a
{
0 q$ M1 G% A, K+ [' K5 j  Uint32 sample;4 a2 }6 N+ l' o

* }' @9 f' O1 x) ^; x( Z7 d  sample = input_sample(); // read L + R samples from ADC& B+ ~0 `8 V5 ]$ o, u# x; t/ t4 _
  output_sample(sample);   // write L + R samples to DAC 6 F+ T& x3 T; a. n0 q7 Z4 \
  return;
" T+ n4 Q5 H3 G3 S# L}
. j- u' r. I4 L
5 o9 T* \/ d; f0 lint main( void )
6 x- E: u4 `, B' `6 J- s{% Q# I. v- j5 b8 Z" R5 D

7 s! f- ^4 f! V  G' n    /* Initialize BSL */" j& [, y- Y" u4 `0 q5 f
    EVMC6747_init( );/ G! p, a& s# O/ R
        /* Call evmc6747_intr function */6 r2 z) Q4 V* b+ q! C8 _$ B
    aic3106_init( );3 l9 w0 T- x- O( n  @" L& M5 G
        while(1);
0 ?# ], @9 M& }! U' T}
( O2 o( p- B7 G3 D) {9 S9 W; s# h; I. ^/ ^# |

$ c) w5 B1 H5 U: m1 |* R' Xaic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
: K+ I/ {' I8 E/* Initialize MCASP1 */
. q3 g$ |, T2 _) {( ]; [( X    mcasp = &MCASP_MODULE_1;
* J3 g) ]8 ]5 ^6 {9 n; m$ O9 e    mcasp->regs->GBLCTL  = 0;       // Reset
$ j: d- {! P' o" O4 _# U0 ?* H    mcasp->regs->RGBLCTL = 0;       // Reset RX
+ P0 h9 J1 Q" n: I& P, s5 J) H    mcasp->regs->XGBLCTL = 0;       // Reset TX, ~% w; L- F1 S
    mcasp->regs->PWRDEMU = 1;       // Free-running1 e" k( ]$ Q$ j5 W# k! V
   // configure McASP0 receive registers
) l  r. d$ C7 [  D    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
- b. C3 s* |+ K# A    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
! i+ u+ D0 L8 z# A- v% I* e    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
8 c) F3 }6 p, P4 y- D4 |/ U) t! N    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
( _) G' `" B4 K( T    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
' [7 b- p" ?1 F* l9 r" v) `    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1( `1 W! |) X- [4 Z2 h% w
    mcasp->regs->RINTCTL    = 0x00000000; // Not used& c: O. A5 q6 @$ C
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* E* d$ m1 z6 F1 ~& Z! F$ `) k
5 {( L/ }; v  ~9 y
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) `; U; G9 T: U. o. D    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus1 {) T" J% u" ]  R
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word( \& p& M' U  s, d
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& M4 a! ^3 z7 k9 f- i    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK; _+ _9 {) V/ j2 h
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1( s# K3 C9 s7 F- d
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
1 C4 _3 n6 n1 `' D3 ?    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2560 x2 ^/ P3 e( ]2 r3 P. n; J

! K) P1 W! s  P. v( |    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN# P; c8 {( x# X' s8 }% p4 t
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
" J& C5 }+ j2 \; V8 E: N2 k    mcasp->regs->PFUNC      = 0;          // All MCASPs8 v" L! X; ?, e
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1/ o! L* M8 n: z: ], A8 ?2 P0 r
+ w+ M, a- j$ T& H+ X0 X
    mcasp->regs->DITCTL     = 0x00000000; // Not used
8 Q) H; D& |' y" {    mcasp->regs->DLBCTL     = 0x00000000; // Not used
2 t9 g% @; r1 C    mcasp->regs->AMUTE      = 0x00000000; // Not used
: _( F6 N; i6 q2 S
$ i5 a% X& v6 Q* m  L/* Starting sections of the McASP*/8 P. x2 Q# Y$ t% Y
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
& q9 P( Z& I# o0 Q! C. S    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
: D% y$ L* R) n0 _5 o% `    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; & B5 }2 v/ `) D! o9 D2 f
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );: u' m) t% G0 r4 f9 V
) ~. w& k0 G9 O% W' F( @% F, e
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! s& K3 q8 i- v  \: E
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
, I! r- A  [8 n9 C' e" Z% Y9 q; D4 a    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 5 S8 b; p! v$ [* h+ D$ P
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );  j+ ~  K- d0 H; e

( \" D' P2 `3 w: ~, U& A7 b7 A    mcasp->regs->XSTAT = 0x0000ffff;
; |2 y, `% e& t+ ?    mcasp->regs->RSTAT = 0x0000ffff; * d9 O% _/ ?& d' Q5 I9 O+ |4 K% C
/ m8 V. O: a. T, f; n! `0 k
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;! J' E) t; p/ W; z( t( b  e1 I
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
& i# t4 K4 V8 n5 a+ w    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
$ L: p; D$ r$ _( B8 ^    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
; `% e6 F: f" S4 T2 k  T1 _' P0 H# d* m1 s" L
    /* Write a 0, so that no underrun occurs after releasing the state machine */
8 ?; {/ L' U* a    mcasp->regs->XBUF5 = 0;- T2 q' C- c" b; d0 \
    mcasp->regs->RBUF0 = 0;
7 g( j% c1 p. I" {
/ {0 v* m$ x- J9 t/ b/ k7 @    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
0 _7 R, y/ a; K  R" z9 @7 @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );/ C% B/ g# P0 `! ?3 [0 x8 E
    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; 5 f; G- u9 n' I
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
4 e& @7 h# I7 l/ G1 c* B  d- Y' a5 Y5 L2 ~4 ~4 c
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
. w4 n, M- L8 y' N8 p    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );4 W. ]4 I5 @1 k4 t3 g% [; A
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
) t% k9 p% A9 M( {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );0 X" ^1 e* q- @8 o7 Q: p1 r" Y2 ^

& ]: |* \- H/ H1 s    CSR = 0x0000;7 ?: E9 s7 m0 F* V/ \
    INTC_INTMUX1 = 0x3d;! [! K0 @' U/ R9 E5 f4 ~
    ISTP = (unsigned int)vectors;
* g$ E7 W8 }2 K% F9 y8 J5 \    ICR = 0xFFF0;  
& @! Y1 f! W2 a$ a4 w1 W% n* ?    IER |= 0x12;  7 A+ X" G) u$ ?/ K, ?  G
    CSR |= 0x01;  
3 S7 q0 Y" E# X/ W1 U7 _2 T4 \# S/ `1 c6 w
- I# z6 h5 [. e
/ A+ q' D, p) D, X8 [% C& M
还有就是两个输入输出函数:# L2 \; g8 i: O7 ]. ^/ x) ~) w2 Y9 i2 J
void output_sample(Int32 out_data)  K3 G5 _/ m, n2 p2 E" j
{
4 f' q3 u* k0 m  AIC31_data.uint = out_data;  3 A2 @3 w6 R/ j  V3 K
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
% e& b& k$ l( I) ^}
4 ?8 G$ J& ^& k0 }
$ I# x5 t. P! }* |- P5 k+ |Int32 input_sample(void)" I( c/ W9 r7 S
{  
1 d; u" Z0 n: p3 ~/ J+ e- Z* t  AIC31_data.uint = MCASP1_RBUF0_32BIT;
: N* Y6 o8 T* M  return (AIC31_data.uint);  x  i  r& \5 G' i3 B% M3 }
}3 }; o& P; L0 L* k/ c/ Y8 ~+ {" o
  D8 [. h% S, 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-1-15 04:30 , Processed in 0.046440 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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