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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:8 u6 G9 L+ n) v/ Y7 U% x/ y3 {
main文件:
/ C& i2 e2 O; z% ]$ H! @- _interrupt void interrupt4(void)  
8 S9 j' `; s, W{
8 [( M5 @8 l- c; h" {, L' W+ E  Uint32 sample;& b# r3 z9 Y8 n& e

$ ~  j( e8 }/ Q! r$ A! x  sample = input_sample(); // read L + R samples from ADC
8 D  ~2 c' [! S  output_sample(sample);   // write L + R samples to DAC
6 u# a; {& c! }' x$ w& ^0 n  return;8 n' a% o( N) g; |5 A
}
$ P7 Q. E' T0 }8 q& N' `2 q- V* a, I
int main( void )0 u: P$ t. I# k5 @, A; W# O) i
{
4 z' `3 J/ O4 S  z( [3 ^% I
, ^% S9 k% N5 `3 W2 Q9 R6 |* g    /* Initialize BSL */
6 Z' X; z1 k$ N" N( ]    EVMC6747_init( );1 s6 h4 X0 o7 T5 g
        /* Call evmc6747_intr function */
; o. s, C( m/ b' P! l" M/ y- }    aic3106_init( );7 d1 e0 m( j; ~# b
        while(1);
+ [$ h: e+ [7 D2 R8 {0 f}
% }5 A9 `4 Z( _9 t: A; q% Q  o( u* }' N$ r

( b* C8 l$ I4 s3 d3 `, Maic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题: N: w9 x- l& ^5 x4 h) d
/* Initialize MCASP1 */, i  P4 @: {) n* E. ^
    mcasp = &MCASP_MODULE_1;/ Y0 i5 x* c6 R, p
    mcasp->regs->GBLCTL  = 0;       // Reset; {' E8 X6 a2 @* ~
    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 ~' `5 ]& p& s- g8 [, R/ ?; y    mcasp->regs->XGBLCTL = 0;       // Reset TX6 R9 U) w7 r9 T6 V. P, \$ P
    mcasp->regs->PWRDEMU = 1;       // Free-running
1 c! A3 @& p" I- v1 o, s   // configure McASP0 receive registers) ~  _. x7 E+ B6 C; Z. e. u
    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used" P1 @+ g# Q4 H5 u$ q4 M% P+ A6 A, e
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus: V& m+ u$ z$ g8 M* t, P  d& X
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word/ }& S1 s! N+ `6 X9 ~
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)' U- t+ [9 N- n$ H
    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
( F" I2 Q* ^0 l( {    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1) g1 @# O5 I! ?1 W8 T
    mcasp->regs->RINTCTL    = 0x00000000; // Not used2 V; Y- @) M+ I( e$ J$ t
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-2562 {; W$ M% X% O$ o7 f
1 t; o/ L; g8 N; F, Q, n
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used5 r" f% N0 u8 A. J1 m0 Z
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
+ v" W3 U3 m. w    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word' D% a. @5 H  g$ X
    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16/ T" t: v6 D, e( h
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK0 W7 }! p# V! R. J
    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
% @# ?& C* V" o- B    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit3 T& [* z  l7 h, ~6 I/ j
    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256
5 {- E( ^1 ~6 o7 [1 E. d' x
2 u  ~$ L! j; e1 S; ]    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
& ?& F$ x) b4 K4 q    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT
5 F1 ]9 {& z! S. U/ s    mcasp->regs->PFUNC      = 0;          // All MCASPs5 m5 x! _' W8 a
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
! y& W) Y; x0 Y  N  J
$ t* E1 B3 V( N1 _    mcasp->regs->DITCTL     = 0x00000000; // Not used4 p/ i+ M* H. M  N% `+ E. s
    mcasp->regs->DLBCTL     = 0x00000000; // Not used
  b8 }  S# }) Q$ v+ y    mcasp->regs->AMUTE      = 0x00000000; // Not used
/ s  \. b: a7 Y2 X& u! i2 c- B
; m7 K0 H! Z, `6 t+ m) y/* Starting sections of the McASP*/1 w- a" M+ a6 Y/ x( j( q( j* Y2 ]
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
* \4 T9 C( q" V/ f; T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
1 a2 f2 t7 m5 B8 I, Y    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
( O% F; S$ n; V, ]5 U1 ~1 W4 @9 S    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );, o. t  }+ O1 ~. z+ h2 Y8 ?6 F5 F
! l8 w; A* k0 a* |- v+ j5 X
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
3 a8 Z6 ^+ p1 T    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );$ O9 Y+ f9 E6 Q
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; ) G6 \2 E: l/ p" D; o, i2 u0 l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );2 v1 l, a" @" {1 X

3 o+ {' A# k, d, Q  ~    mcasp->regs->XSTAT = 0x0000ffff;   v5 @' v3 i9 @  s) v# U
    mcasp->regs->RSTAT = 0x0000ffff; ! s7 @: W, q" B1 D/ r$ N) r6 X
' e# Y7 r$ h  |8 J
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;; V# S; u" t$ D7 a
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
9 v* ^/ O# C' j* k7 m    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON; - X+ x4 n4 ]! q* ?
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
$ O% m+ f) `/ b- ?4 b1 N
3 m' F# h8 q2 r3 A    /* Write a 0, so that no underrun occurs after releasing the state machine */$ ~' P1 [# E  |2 ?
    mcasp->regs->XBUF5 = 0;
  v( q/ f5 f5 X7 ?    mcasp->regs->RBUF0 = 0;0 f$ Z: n0 y  B+ {: D9 _

8 m" G; g. T1 [. G    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ! z+ E  Q- O# k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
  Q* s  o) k( m    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
4 x$ T/ P6 L7 g; I8 J7 R    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );" ]. Q$ f: J' ]0 ^9 j: [

2 r7 O. \2 V" j7 @0 k- z0 f    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 8 |% S; a, f, J' e, X- ~# k
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );3 A4 B5 ]+ ?  U
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; & @6 q7 k' Z7 d1 z) }. u
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );
# d/ K! d( h$ S; p( [/ P, Y- _* K' k+ y4 f) s- D: R6 W
    CSR = 0x0000;4 ~1 k9 V& `. p( q3 i# z* |
    INTC_INTMUX1 = 0x3d;
  x3 H. g0 W" B" y/ n- }    ISTP = (unsigned int)vectors;
1 q) {: m! V& v8 L5 s. `    ICR = 0xFFF0;  0 g! c" [. A& L5 j+ w. X' K7 B+ i
    IER |= 0x12;  
6 Q4 [* P) I4 ?/ @" E    CSR |= 0x01;  
8 P( x- Y* |- f7 b; @+ s9 i7 b( b! O
+ o6 }# K7 n! o/ ^; ~6 U

# z; ^$ D# `* G& s还有就是两个输入输出函数:; |' s' I6 _8 o. V
void output_sample(Int32 out_data)( R. d2 F. [% b% Z9 G2 N4 f& e' W
{
/ d' M* g+ s7 t! W' U, q5 x  AIC31_data.uint = out_data;  ; Y2 i5 P9 c3 t- N
  MCASP1_XBUF5_32BIT = AIC31_data.uint;
. E: Q- W5 B, F. X}
6 Z; A+ j' s! p1 n- W2 g( l/ a* t7 C9 V& C+ I6 X
Int32 input_sample(void)4 Q5 F2 K7 N* ^8 Z6 X. N! m
{  
/ L- ^" P) M1 h$ @- I& v. v0 ]% L  AIC31_data.uint = MCASP1_RBUF0_32BIT;
( c& _0 d7 w; V, U  return (AIC31_data.uint);
! @5 ~! r, c) A$ t5 t4 [}
4 S; S! ^3 I5 ?4 P* J* M7 u2 M) X) n# u5 \+ ^0 Q7 s. R
分享到:  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-8 21:09 , Processed in 0.039473 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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